マルチスレッドで教えてください。
ソケットプログラミングで、受信スレッドがキューにデータを溜めて、
メインスレッドは順次データを読み出して処理するというプログラムを書いています。

メインスレッドはキューにデータが無ければ受信するまで待機したいのですが、
一般的にどう実装するものでしょうか?

とりあえず作った受信スレッドは、
Monitor.Enter(obj);
受信ループ
 キューに格納
 Monitor.Exit(obj);
 Monitor.Enter(obj);
ループEnd
Monitor.Exit(obj);

受信の都度Exitしてメインスレッドに所有権を明け渡しています。
動作には問題なさそう?なんですけど、なんかスマートじゃないというか。。。