デッドロックが発生するプログラムを作成したいと思います。
下記のプログラムがテンプレートでそこから自分で試してみました。
このプログラムがデッドロックを発生しているか教えてください。
('#'を先頭に記載する方法も教えて下さい。)
2 個のスレッド t1 と t2 が 2 個のミューテックス m1 と m2 を使用しているとします。
#試したこと
.#include <pthread.h>
.#include <stdio.h>
pthread_mutex_t m1 = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t m2 = PTHREAD_MUTEX_INITIALIZER;
void *f1(void *arg) {
while (1) {
pthread_mutex_lock(&m1);
printf("f1: running\n");
pthread_mutex_lock(&m2);
pthread_mutex_unlock(&m2);
pthread_mutex_unlock(&m1);
}
return NULL;
}
void *f2(void *arg) {
while (1) {
pthread_mutex_lock(&m2);
printf("f2: running\n");
pthread_mutex_lock(&m1);
pthread_mutex_unlock(&m1);
pthread_mutex_unlock(&m2);
}
return NULL;
}
int main(int argc, char *argv[]) {
pthread_t t1, t2;
if (pthread_create(&t1, NULL, f1, NULL)) { perror("pthread_create"); return 0; } if (pthread_create(&t2, NULL, f2, NULL)) { perror("pthread_create"); return 0; } pthread_join(t1, NULL); pthread_join(t2, NULL); return 0;
}
回答1件
あなたの回答
tips
プレビュー