#include<pthread.h>
#include<stdio.h>
#include<semaphore.h>
void func();
int a;
int main()
{
pthread_t thread1;
sem_t semaphore1;
sem_init(&semaphore1,0,1);
pthread_create(&thread1,NULL,(void *)func,NULL);
sem_wait (&semaphore1);
a=62;
printf("%d",a); \\ as i found on google
sleep(2); \\ i believe a value should be sticked to 62
sleep(1); \\ but output shows different why?
printf("%d",a);
sem_post(&semaphore1);
}
void func()
{
a=45;
sleep(1);
a=32;
a=75;
printf("hello");
}
Когда я его погуглил. Я обнаружил, что sem_wait блокирует глобальную переменную, чтобы никакой другой поток не обращался к переменной.
Но когда я попробовал этот код, выводом будет
62
hello
75.
Значение a изменилось, но обратите внимание, что printf ("% d", a) находится под sem_wait. Что не так с моим кодом?