Все зависит от того, что обеспечивают эти семафоры. 1. Семафоры обеспечивают синхронизацию потоков. Тогда будут выполнены P(S!) в первом потоке и P(S2) во втором, причем более быстрый процесс подождет, а затем работа пойдет одновременно с точки P(S2) в первом потоке и P(S1) во втором. 2. Семафоры захватывают ресурсы. В этом случае произойдет взаимная блокировка. Например, P(S2) в первом потоке будет ждать некоего ресурса, захваченного вторым потоком, а P(S1) во втором потоке - ресурса, захваченного первым потоком. 3. Семафоры запрещают одновременное выполнение некоторого общего участка кода. Также возможна взаимная блокировка по принципу, описанному выше.
#include <stdio.h>
int main(void)
{const int n=10;
int ar[n],i,j,k,c;
i=0;
while(i<n)
{scanf("%d",&ar[i]);
i++;}
printf(" \nfirst array \n");
i=0;
while(i<n)
{printf("%d ",ar[i]);
i++;}
i=0;
k=0;
while(i<n)
{if(ar[i]%5==0)
{c=ar[i];
ar[i]=ar[k];
ar[k]=c;
k++;}
i++;}
printf(" \n1 fin array \n");
i=0;
while(i<n)
{printf("%d ",ar[i]);
i++;}
i=0;
while(i<(n-1))
{j=i+1;
while(j<n){
if(ar[i]>ar[j])
{c=ar[i];
ar[i]=ar[j];
ar[j]=c;}
j++;}
i++;}
printf("\n2 fin array \n");
i=0;
while(i<n)
{printf("%d ",ar[i]);
i++;}
return 0;
}
Пример ввода:
1
5
2
10
3
15
4
20
5
25
Пример вывода:
first array
1 5 2 10 3 15 4 20 5 25
1 fin array
5 10 15 20 5 25 4 1 3 2
2 fin array
1 2 3 4 5 5 10 15 20 25
1. Семафоры обеспечивают синхронизацию потоков. Тогда будут выполнены P(S!) в первом потоке и P(S2) во втором, причем более быстрый процесс подождет, а затем работа пойдет одновременно с точки P(S2) в первом потоке и P(S1) во втором.
2. Семафоры захватывают ресурсы. В этом случае произойдет взаимная блокировка. Например, P(S2) в первом потоке будет ждать некоего ресурса, захваченного вторым потоком, а P(S1) во втором потоке - ресурса, захваченного первым потоком.
3. Семафоры запрещают одновременное выполнение некоторого общего участка кода. Также возможна взаимная блокировка по принципу, описанному выше.