pthread_cond と pthread_mutex の代わりにセマフォを使用するこの小さなプログラムを作成しました。
#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
sem_t sema;
pthread_t threads[2];
pthread_cond_t cond;
pthread_mutex_t mutex;
int value;
void * worker_a();
void * worker_b();
int main() {
value = 3;
sem_init(&sema, 0, 0);
pthread_create(&threads[1], NULL, worker_b, NULL);
pthread_create(&threads[0], NULL, worker_a, NULL);
pthread_join(threads[0], NULL);
pthread_join(threads[1], NULL);
pthread_detach(threads[0]);
pthread_detach(threads[1]);
sem_destroy(&sema);
printf("Value has been set to: %d.\n", value);
return 0;
}
/**
* Multiplicates value by 4.
*/
void * worker_a() {
value *= 4;
sem_post(&sema);
pthread_exit(NULL);
}
/**
* Divides value by 2.
*/
void * worker_b() {
sem_wait(&sema);
value /= 2;
sem_post(&sema);
pthread_exit(NULL);
}
まず、この例は正しいですか?つまり、適切にコンパイルおよび実行されますが、これは単純なプログラムのせいかもしれません。
2 つ目: セマフォを使用することは、ミューテックス、条件変数、および多くの条件フラグを使用するよりもスマートな代替手段であることを正しく理解していますか?
ボードー