开发平台(Platform): (Ex: Win10, Linux, ...)
Linux
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC
问题(Question):
小弟是使用thread的新手,想练习一下semaphore的使用
下面连结的程式码
开两个thread,分别跑producer和consumer两支function
Buffer是一个stack架构
producer: 将Buffer的top位置填值,并将stack的top位置往上加
consumer: 将Buffer的top位置填值为0,并将stack的top位置往下减
producer第一次填值为1,每次填值都会是上一次的值+1,直到值加到10000,
两个thread就呼叫 pthread_exit(NULL); 离开,然后程式结束。
因为Buffer的空间有1000格,使用两个semaphore变量: empty与full
producer进入,会将empty-1、full+1,就是放一个东西进Buffer的意思
consumer进入,会将empty+1、full-1,就是从Buffer拿走一个东西的意思
想请问一下
1.Buffer有1000格,一开始都没有放东西,所以对empty与full init的方法是对的吗?
sem_init(&empty, 0, 1000);
sem_init(&full, 0, 0);
2.我也好奇,sem_wait 和 sem_post 要怎么知道Buffer有1000格呢?
要如何让程式知道empty=1000表示Buffer是全空,full=1000表示Buffer是全满呢?
3.另外小弟的code逻辑上是否有什么错误吗?
谢谢
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
https://ideone.com/MyhKC7 (new)
https://ideone.com/xv22NM (old)