- 论坛徽章:
- 0
|
这是一道面试题。弱弱的问一下,为什么加颜色的两行不发生死锁呢?
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define THRNR 4
static pthread_mutex_t mut[THRNR];
static void*
job(void *ptr)
{
int p=(int)ptr;
int prev, next;
prev=p;
next=prev+1;
if (p==THRNR-1) {
next=0;
}
while (1) {
pthread_mutex_lock(mut+prev);
putchar('A'+p);
fflush(stdout);
sleep(1);
pthread_mutex_unlock(mut+next);
}
return NULL;
}
int
main()
{
int i;
pthread_t thr[THRNR];
int err;
void *tharg;
/* Init four locks */
for (i=0;i<THRNR;++i) {
pthread_mutex_init(mut+i, NULL);
pthread_mutex_lock(mut+i);
}
/* Create four threads */
for (i=0;i<THRNR;++i) {
err=pthread_create(thr+i, NULL, job, (void*)i);
if (err) {
fprintf(stderr, "pthread_create(): %s\n", strerror(err));
exit(1);
}
}
pthread_mutex_unlock(mut);
for (i=0;i<THRNR;++i) {
pthread_join(thr, NULL);
}
exit(0);
}
[ 本帖最后由 hassleliu 于 2008-10-24 22:14 编辑 ] |
|