2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Windows中的WaitForSingleObject()函数对应在Linux中的sem_wait(),SetEvent对应sem_post(),
参考下面的Linux程序:
#include
#include
#include
#include
#include
#include
char tem[10]//读写公共区
sem_t sem
void* thread_fun(void*)
int main()
{
int counter=0
pthread_t mythread
sem_init(&sem,0,0)
pthread_create(&mythread,NULL,thread_fun,NULL)
while(counter<10) //往读写区里写10次'f'
{
tem[counter]='f'
counter++
sem_post(&sem)
}
pthread_join(mythread,NULL)//等待子线程
sem_destroy(&sem)
exit(0)
}
void* thread_fun(void* arg) //子线程函数
{
int counter=0
while(counter<10&&sem_wait(&sem)==0)
{
printf("%c",tem[counter])//读出来显示
counter++
//sem_wait(&sem)
}
pthread_exit(NULL)
}
不是信号量的问题printf函数,是先写到输出缓冲,遇到\n时,或者缓冲区满时,或者有强制输出(fflush)时,才会将缓冲区里的内容输出到屏幕上(标准输出设备:stdout)。你的代码里面并没有以上3个触发条件的任意一种,所以printf的内存没有实际输出到屏幕上。
你只要在每个printf函数后面加上fflush(stdout)就可以了。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)