0

共有メモリと連動機能を利用したシステムを開発しています。

私が持っていると仮定しましょうvolatile unsigned int n, a, b。次の擬似コードをアトミ​​ックに実行したいと思います。

if (a <= n && n < b)
{
    n++;
}
else
{
    //Do nothing
}

どうすればいいですか?複数のインターロック機能を一緒に使用できますか?

4

2 に答える 2

5

ロックまたはCASタイプの操作が必要です。volatileここで役立つ金額はありません。真のアトミックデータ型でもありません。

于 2011-07-03T16:36:13.633 に答える
2

同期プリミティブ(セマフォ、ミューテックスなど)は、言語自体ではなく、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

于 2011-07-04T06:34:36.030 に答える