【发布时间】:2011-07-24 05:00:12
【问题描述】:
一个幼稚的问题..
我之前读到过 -“MUTEX 只能由锁定它的线程解锁。”
但我编写了一个程序,其中 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 - 添加了示例代码..
-
NO -- 但值为 1 的 SEMAPHORE 可以像互斥锁一样,并且可以从不同的线程解锁。但是,您可能需要使用互斥锁来保护信号量上的操作,以阻止其值超过 1。