共有メモリと連動機能を利用したシステムを開発しています。
私が持っていると仮定しましょうvolatile unsigned int n, a, b
。次の擬似コードをアトミックに実行したいと思います。
if (a <= n && n < b)
{
n++;
}
else
{
//Do nothing
}
どうすればいいですか?複数のインターロック機能を一緒に使用できますか?
共有メモリと連動機能を利用したシステムを開発しています。
私が持っていると仮定しましょうvolatile unsigned int n, a, b
。次の擬似コードをアトミックに実行したいと思います。
if (a <= n && n < b)
{
n++;
}
else
{
//Do nothing
}
どうすればいいですか?複数のインターロック機能を一緒に使用できますか?
ロックまたはCASタイプの操作が必要です。volatile
ここで役立つ金額はありません。真のアトミックデータ型でもありません。
同期プリミティブ(セマフォ、ミューテックスなど)は、言語自体ではなく、OS固有のライブラリによって提供されます。C / C ++には、固有の「同期」キーワードはありません。
Linuxでプログラミングしている場合は、PosixスレッドまたはBoostライブラリを確認してください。
http://www.yolinux.com/tokyoS/LinuxTutorialPosixThreads.html
ネイティブのWindowsWin32(Win98以降)でプログラミングしている場合は、EnterCriticalSection()やInterlockedAdd()などのAPIを使用できます。
http://msdn.microsoft.com/en-us/library/ms686353%28v=VS.85%29.aspx
ただし、.Netを使用してWindowsをプログラミングしている場合は、標準の.Netライブラリの一部である同期プリミティブに戻ります。
http://msdn.microsoft.com/en-us/library/ms173179.aspx
'役立つことを願っています..PSM