※ ChatGPTを利用し、要約された質問です(原文:remove関数(?)でプロセスが停止する。)
remove関数でプロセスが停止する理由とは?
このQ&Aのポイント
remove関数とsystem(mkdir)関数が同時に実行すると、プロセスが停止してしまう現象が発生しています。
この現象は、remove関数とsystem(mkdir)関数が同じディレクトリを操作しようとすることによる競合が原因です。
解決方法としては、remove関数とsystem(mkdir)関数を同時に実行しないようにするか、排他制御を行うことが考えられます。
remove関数(?)でプロセスが停止する。
すみません。とても困っています。
ご存知でしたら、教えてください。
現在、linuxでc言語のプログラミングをしています。
元々、以下のディレクトリがあるとします。
/var/tmp/etc
2つのプロセスがあり、それぞれA、Bとします。
プロセスA内の一つのスレッドで、
remove("/var/test.dat")を実行し削除するようにプログラムしています。
また、プロセスB内の1つのスレッドで、
system("mkdir /var/tmp/etc/test1)とし、test1ディレクトリを
作るようプログラムしています。
実行し、普通に動いていたのですが、
このremove関数とsystem(mkdir)関数が同時?に実行(バッティング)すると
そこでピタッと処理がとまってしまい、
(↑ログを仕込んで調べてみました。確実ではありませんが、同時に起きる時に
大体とまっていると推測しています。)
/varディレクトリにすらアクセスできなくなってしまいます。
(cd var で lsコマンドを叩くと何も表示されないし、リターンもない)
この現象を回避したいのはしたいのですが、
まず原因を知りたいと思っています。
remove関数とsystem(mkdir)関数が同時に走るとなぜだめなんでしょうか?
すみませんが、いくら調べてわかりませんでした。
ご教示いただけると助かります。
以上、よろしくお願いいたします。
補足
ご回答ありがとうございます。 おっしゃるとおり、mkdir()という方法もあると思い、 system関数をmkdir()に書き換えたところ、 同じ現象が発生しました。 mkdir() と remove()は同時に使うとだめなんでしょうか?