私が取り組んでいるプログラムには、次のようなコードがたくさんあります。
pthread_mutex_lock( &frame->mutex );
frame->variable = variable;
pthread_mutex_unlock( &frame->mutex );
真ん中の命令をアトミックストアに置き換えることができれば、これは明らかにCPUサイクルの無駄です。gccがこれを実行できることは知っていますが、このような単純なスレッドセーフなアトミック操作に関するドキュメントはあまり見つかりませんでした。このコードセットをアトミック操作に置き換えるにはどうすればよいですか?
(単純なストアは理論的にはアトミックである必要があることはわかっていますが、オプティマイザーがプロセスのある時点でアトミック性を台無しにしないことを期待する必要はありません。)
明確化:厳密にアトミックである必要はありません。これらの変数は、スレッドの同期にのみ使用されます。つまり、スレッドBは値を読み取り、その値が正しいかどうかを確認し、正しくない場合はスリープします。したがって、スレッドAが値を更新し、スレッドBがその更新を認識しない場合でも、問題はありません。これは、スレッドBが実際には必要のないときにスリープし、ウェイクアップすると値がスリープすることを意味するためです。正しいこと。