據我所知,互斥鎖應該鎖定一次,然後阻止其他人,直到釋放,就像這樣。互斥鎖無數次
但是我的代碼,這似乎是多線程鎖定相同的互斥。我有一個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);
'int retcode = pthread_mutex_lock(&queuemutex); assert(retcode == 0);' – Sebivor 2013-02-26 12:44:44
什麼是'currentWaiting'?或者更具體地說,'currentWaiting-> status'的初始值是多少? – Hasturkun 2013-02-26 12:49:57