人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

排他制御である「トイレのロックのプログラム」をC言語で簡単に教えて欲しい

●質問者: だいちゃん、アジエンス
●カテゴリ:コンピュータ 学習・教育
✍キーワード:C言語 トイレ プログラム ロック 排他制御
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Ma2
●10ポイント

http://s03.2log.net/home/programmer/archives/blog20041101.html

笑わないプログラマ

これのことかな?


さて、排他制御はハードウェアの機能を使わないと実現できないので、ハード依存になります。

言い換えると、C言語自体にはその機能がなく、C以外で作成された関数を呼び出すことになります。


たとえばWindowsでSpinlockを使うなら、DDKを利用して

AllocateSpinLock() でSpinlockを作成、

AcquireSpinLock() でロックして

ReleaseSpinLock() でロック解除、

FreeSpinLock() で削除します。

これらの関数も大部分はCで書かれているはずですが、肝心のメモリのロックはCで書けないのでCではないはずです。


2 ● nitscape
●40ポイント

http://www.google.co.jp/

Google

かなりテキトウなプルグラムですが例えば以下のようなものでしょうか?

起動すると成功します(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;

}

◎質問者からの返答

コンパイルできませんが?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ