互斥锁多次锁定
发布时间:2020-12-16 09:42:48 所属栏目:百科 来源:网络整理
导读:据我所知,互斥锁应该锁定一次,然后阻止其他人,直到释放,就像这样. 但是使用我的代码,似乎多个线程锁定了相同的互斥锁.我有一个10的线程池,所以肯定9应该阻止,1应该锁定.但我得到了这个输出. Thread 0 got locked Thread 1 got locked Thread 3 got locked Th
据我所知,互斥锁应该锁定一次,然后阻止其他人,直到释放,就像这样.
但是使用我的代码,似乎多个线程锁定了相同的互斥锁.我有一个10的线程池,所以肯定9应该阻止,1应该锁定.但我得到了这个输出. Thread 0 got locked Thread 1 got locked Thread 3 got locked Thread 4 got locked Thread 2 got locked Thread 5 got locked Thread 6 got locked Thread 7 got locked Thread 8 got locked Thread 9 got locked 我的互斥锁全局定义在* .c文件的顶部,因为, pthread_mutex_t queuemutex = PTHREAD_MUTEX_INITIALIZER; 以下是相关的代码段. //In the main function which creates all the threads int k; for (k = 0; k < POOLSIZE; k++) { pthread_t thread; threadinformation *currentThread = (threadinformation *)malloc(sizeof(threadinformation)); currentThread->state = (int *)malloc(sizeof(int)); currentThread->state[0] = 0; currentThread->currentWaiting = currentWaiting; currentThread->number = k; threadArray[k] = currentThread; pthread_create(&thread,NULL,readWriteToClient,threadArray[k]); currentThread->thread = thread; joinArray[k] = thread; } 这里是所有10个线程似乎都获得锁定的代码段. pthread_mutex_lock(&queuemutex); fprintf(stderr,"Thread %d got locked n",threadInput->number); while((threadInput->currentWaiting->status) == 0){ pthread_cond_wait(&cond,&queuemutex); fprintf(stderr,"Thread %d got signalled n",threadInput->number); } connfd = threadInput->currentWaiting->fd; threadInput->currentWaiting->status = 0; pthread_cond_signal(&conncond); pthread_mutex_unlock(&queuemutex); 解决方法
我的精神力量表明当前等待 – >状态最初为0.
既然如此,您的代码进入while循环并等待条件变量. 等待条件变量会解锁互斥锁,直到等待完成,允许其他线程获取它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |