2016-11-14 9 views
0

通常は、問題のないさまざまなスレッドによって1つのリソースにアクセスできるようにするため、ロックのメカニズムとしてシリアルキューを使用します。しかし、私は、他の開発者がセマフォを持つ、あるいは使わなくても並行キューを使用するケースを見てきました。スウィフトキュー/並行性とロック

利点/欠点はありますか?シリアルキューを使うだけで、セマフォーの時間を無駄にせずにリソースを正しくブロックできると私は信じています。

一方、CPUがビジー状態になるとどうなりますか?私が正しく覚えていれば、シリアルキューは必ずしも同じスレッド/同じCPU上で実行されるわけではないでしょうか?

これは私が考えることができる唯一の説明です。並行キューは使用可能なすべてのスレッド/ CPU上でワークロードを共有できるため、セマフォを介したスレッドセーフなアクセスが保証されます。 セマフォなしで並行キューを使用すると安全ではないでしょうか?

答えて

1

セマフォを使用する並行キューは、どの条件がロックを必要とするかについて、より詳細な情報を提供します。相互に排他的な領域(クリティカル領域)のみがロックを必要とするため、ほとんどの機能を並列に実行させることができます。

ただし、相互排除を確実にするために、クリティカル領域がシリアルキューにディスパッチされるコンカレントキューを使用して同様にシミュレートできます。

私は、シリアルキューを使用するだけで、セマフォーの時間を無駄にせずにリソースを正しくブロックできると思います。

シリアルキューは、キューの突然変異を同期させる必要があるため、セマフォも必要です。しかし、それは敷物の下に置かれ、手動セマフォの使用に関連する多くの簡単に間違いからあなたを守ります。

セマフォなしの並行キューを使用するのは安全ではないでしょうか?

いや

+0

その洞察力のためにありがとうございました! :) – smat88dd