幼稚的问题Pthread互斥锁解开..不同线程
我说之前阅读 - “一个互斥,必须由锁定它的线程只能解锁”
但我已经写一个程序,其中THREAD1锁定mutexVar并进入睡眠状态。然后THREAD2可以直接解锁mutexVar做一些操作并返回。
==>我知道每个人都说我为什么这么做?但我的问题是 - 这是MUTEX的正确行为?
==>添加示例代码
void *functionC()
{
pthread_mutex_lock(&mutex1);
counter++;
sleep(10);
printf("Thread01: Counter value: %d\n",counter);
pthread_mutex_unlock(&mutex1);
}
void *functionD()
{
pthread_mutex_unlock(&mutex1);
pthread_mutex_lock(&mutex1);
counter=10;
printf("Counter value: %d\n",counter);
}
int main()
{
int rc1, rc2;
pthread_t thread1, thread2;
if(pthread_mutex_init(&mutex1, NULL))
printf("Error while using pthread_mutex_init\n");
if((rc1=pthread_create(&thread1, NULL, &functionC, NULL)))
{
printf("Thread creation failed: %d\n", rc1);
}
if((rc2=pthread_create(&thread2, NULL, &functionD, NULL)))
{
printf("Thread creation failed: %d\n", rc2);
}
@Santiago - 添加了示例代码.. – codingfreak 2011-03-28 04:53:16
不 - 但SEMAPHORE的值为1可以像互斥体一样,并且可以从不同的线程解锁。但是,您可能需要使用互斥锁来保护信号量的运算,以使其值停留在1以上。 – aaa90210 2017-04-02 04:30:42