如题, 分享一个在Mac OS X/C语言中使用信号量机制实现4个线程协助的例子. 其中, 头文件<翻译包.h>可见此处.
#include <stdio.h>
#include <翻译包.h>
#include <time.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
#include <fcntl.h>
#include <sys/stat.h>
整数 队列长度 = 10;
整数 队列1[10];
整数 队列2[10];
信号量 *信号量1, *信号量2, *信号量3, *信号量4;
整数 头指针1 = 0, 尾指针1 = 0;
整数 头指针2 = 0, 尾指针2 = 0;
void 阶段1(void) {
对于(整数 索引 = 0; 索引 < 100; ++索引) {
_等待信号量(信号量1);
整数 临时随机数 = 生成随机数()%65536;
队列1[尾指针1] = 临时随机数;
尾指针1 = (尾指针1 + 1)%队列长度;
输出("索引:%d, 生成随机数:%d\n", 索引, 临时随机数);
_增加信号量(信号量2);
}
}
void 阶段2(void) {
当 (1) {
_等待信号量(信号量2);
整数 临时随机数 = 队列1[头指针1];
头指针1 = (头指针1 + 1)%队列长度;
_增加信号量(信号量1);
_等待信号量(信号量3);
队列2[尾指针2] = 临时随机数;
尾指针2 = (尾指针2 + 1)%队列长度;
_增加信号量(信号量4);
}
}
v