我寫了使用信號,而不是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);
}
首先是這個例子正確的嗎?我的意思是它編譯和執行正確,但也許這只是因爲簡單的程序。
作爲第二個:我是否正確理解使用信號量只是使用互斥鎖,條件變量和大量條件標誌的更明智的選擇?
博德
關於第二個問題參見[百科](http://en.wikipedia.org/wiki/Semaphore_(編程)#Semaphores_vs._mutexes) –
我無法確定你的解決方案的「正確性」,因爲我不知道你在計算什麼!如果您的目標是創建互斥,您可能需要考慮使用[拆分二進制信號量(PDF警告)](http://www.cs.arizona.edu/classes/cs422/spring08/notes/4-Chapter4.pdf )。一般來說,大多數鎖系統實際上都是通過信號量來實現的。 –
@RyanMarcus的目標是將價值設置爲6作爲最終結果。這個工程,但我不知道這個解決方案是否真的安全 – bodokaiser