私はThriftフレームワークを使用して、いくつかのアプリ間のIPCを処理しています。
私が解決したいわずかな競合状態の問題があるようですが、この解決策で発生したスレッドセーフの問題もあります。
TSimpleServer(Thrift code)には、次のようなコードがあります。
void TSimpleServer::serve()
{
// ...
while(!stop_) { // ... }
}
void TSimpleServer::stop()
{
stop_ = true;
// ...
}
したがって、この関数を実行する新しいスレッドを起動すると、次のようになります。
void workerFunction()
{
// server is of type TSimpleServer
server.serve(); // blocks here
}
そして、別のスレッドから停止してみてください。
void StopServer()
{
server.stop(); // called from a separate thread
}
stop()からのスレッドが書き込みを行っているときに、serve()を実行しているスレッドがTSimpleServerの保護されていないstop_プロパティから読み取ることができるのではないでしょうか。
これは私が見落としている何らかの理由で問題ではありませんか?これを同期するための助けをいただければ幸いです。