スレを勃てるまでもないC/C++の質問はここで 4
■ このスレッドは過去ログ倉庫に格納されています
0642デフォルトの名無しさん
2008/12/14(日) 15:44:45いわゆる生産者消費者問題(有限バッファ問題)です。
生産者スレッド
do {
pthread_mutex_lock(&lock);
share_buf_num = read(fd, prod_buf, SHARE_BUFSIZE);
strncpy(share_buf, prod_buf, share_buf_num);
pthread_mutex_unlock(&lock);
} while (share_buf_num != 0);
消費者スレッド
do {
pthread_mutex_lock(&lock);
strncpy(cons_buf, share_buf, share_buf_num);
write(fd, cons_buf, SHARE_BUFSIZE);
pthread_mutex_unlock(&lock);
} while (share_buf_num != 0); // do {
share_bufが共有バッファ、SHARE_BUFSIZEがそのサイズ
生産者でデータをリードしている間は消費者は待っており、
そのあと消費者がライトしている間は生産者が待つ
という動作を期待してるんですが、生産者のみがループし続けて
ループを抜けたあとに消費者スレッドが動くという挙動を起こします。
何が原因なのでしょうか。
gcc 4.3.2, Ubuntu8.10(仮想マシン上)です。
■ このスレッドは過去ログ倉庫に格納されています