これのことかな?
さて、排他制御はハードウェアの機能を使わないと実現できないので、ハード依存になります。
言い換えると、C言語自体にはその機能がなく、C以外で作成された関数を呼び出すことになります。
たとえばWindowsでSpinlockを使うなら、DDKを利用して
AllocateSpinLock() でSpinlockを作成、
AcquireSpinLock() でロックして
ReleaseSpinLock() でロック解除、
FreeSpinLock() で削除します。
これらの関数も大部分はCで書かれているはずですが、肝心のメモリのロックはCで書けないのでCではないはずです。
かなりテキトウなプルグラムですが例えば以下のようなものでしょうか?
起動すると成功します(succeededと表示される)が、1つプログラムを起動したまま同じプログラムをもう1回起動すると失敗します(failedと表示される)。
つまり、1つ起動している(トイレに鍵がかかっている)ときは、もう1つ起動することはできません(誰かが入ることはできません)。
#include ”stdafx.h”
#include <io.h>
#include <sys/locking.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <share.h>
int main(int argc, _TCHAR* argv[])
{
int fh;
fh = _sopen( ”c:¥¥test.txt”, _O_CREAT | _O_TRUNC,_SH_DENYNO,_S_IREAD | _S_IWRITE );
if( fh == -1 )
{
printf( ”failed¥n” );
return0;
}
if( _locking( fh, LK_NBLCK, 30L ) != -1 )
{
printf(”succeeded¥n”);
while(1)
{
;
}
}
else
printf( ”failed¥n” );
_close( fh );
return 0;
}
コンパイルできませんが?