開發平台(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)