0
#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.
的價值得到了改變,但注意,輸出(「%d」,a)是sem_wait下,什麼錯我的代碼?
你的意思是互斥體的選項是什麼? – niko
@niko事實上,你正在像一個互斥體一樣使用信號量。但這不是問題:) – cnicutar
它的lock()概念類似於C# –