天真的问题..
我读过之前说过:“ 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); }
您所做的只是不合法的,行为是不确定的。互斥仅排除按规则运行的线程。当然,如果您尝试从线程2锁定互斥锁1,则该线程将被阻塞;那是必须要做的。规范中没有任何内容说明如果您尝试解锁不拥有的互斥锁会发生什么!