今日、pthread コードを書きました。
#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...
thread2 は実行されていないようです。したがって、このコードを 1 時間以上実行すると、thread2 は 1 行だけを出力します。インターレースで実行しないのはなぜですか?
私の環境:
- Ubuntu 10.04 x86_64
- Linux ubuntu 2.6.32-36-generic #79-Ubuntu SMP Tue Nov 8 22:29:53 UTC 2011 x86_64 GNU/Linux
- CPU:Intel Core i7 930 (4コア、8スレッド)
ありがとうございました。