我写了一个并行线程代码今天:为什么我的两个线程不能交错运行?
#include <pthread.h>
#include <stdio.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
void *thread1(void *arg)
{
while (1) {
pthread_mutex_lock(&mutex);
sleep(1);
printf("thread1...\n");
pthread_mutex_unlock(&mutex);
}
}
void *thread2(void *arg)
{
while (1) {
pthread_mutex_lock(&mutex);
sleep(1);
printf("thread2...\n");
pthread_mutex_unlock(&mutex);
}
}
int main()
{
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, thread1, NULL);
pthread_create(&tid2, NULL, thread2, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
return 0;
}
我希望它会运行像:
thread1...
thread2...
thread1...
thread2...
但实际上它运行:
thread1...
thread1...
thread1...
thread1...
的线程2似乎不能运行。 因此,我运行这个代码超过一小时, thread2只打印一行。 他们为什么不交错隔行?
我的环境:
- 的Ubuntu 10.04 x86_64的
- Linux操作系统Ubuntu 2.6.32-36-通用#79,Ubuntu的SMP星期二11月8日22时29分53秒UTC 2011 x86_64的GNU/Linux的
- CPU:Intel Core i7 930(4核,8线程)
谢谢。
1秒钟睡眠应该移出锁,你会看到稍微好一点的结果 – Petesh
你认为线程会被交错的原因是什么? – NPE