Ниже приведен код, содержащий только основные части. Каждый раз, когда код запускается, выходные данные меняются, я предполагаю, что это происходит из-за того, что thread 1
не запускается, но я озадачен тем, как это исправить.
Я стремлюсь к значению i
, чтобыдобавить в 10 раз в thread 1
, а затем уменьшить в 10 раз в thread 2
, но я не знаю, почему это не происходит при каждом проходе.
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <semaphore.h>
int i = 0;
int temp = 0;
sem_t delayT;
sem_t sync;
void * thread1(void * p)
{
sem_wait(&delayT);
while(i>0)
{
sem_wait(&sync);
i--;
temp = i;
printf("Out:%d\n",i);
sem_post(&sync);
if(temp==0)
sem_wait(&delayT);
}
}
void * thread2(void * p)
{
while(i<10)
{
sem_wait(&sync);
i++;
printf("in:%d\n",i);
if(i==10)
sem_post(&delayT);
sem_post(&sync);
}
}
int main (int argc, char * argv[]) {
pthread_t t1;
pthread_t t2;
sem_init(&delayT,0,0);
sem_init(&sync,0,1);
pthread_create (&t1, NULL, thread1, NULL);
pthread_create (&t2, NULL, thread2, NULL);
pthread_join (t2, NULL);
}