0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

排他制御

Posted at

排他制御

あるリソースに同時に1つの処理しかアクセスできなくする排他制御という仕組みがあります。

気づき

データベースの共有ロックや専有ロックとかあったな。

排他制御の大切さを知る

root@**********:***********# cat count 
0
root@**********:***********# ./inc.sh 
root@**********:***********# cat count 
1
root@**********:***********# echo 0 > count
root@**********:***********# for ((i=0;i<1000;i++)) ; do ./inc.sh ; done
root@**********:***********# cat count
1000
root@**********:***********# echo 0 > count
root@**********:***********# cat count
0
root@**********:***********# for ((i=0;i<1000;i++)) ; do ./inc.sh & done ; wait
...
[993]   終了                  ./inc.sh
root@**********:***********# cat count
407

クリティカルセクション

同時に実行されると困る一連の処理のこと

アトミック処理

システムの外から見て一つの処理に見える一連の処理のこと

気づき

クリティカルセッションがアトミック処理になっていると排他処理になって同時に一つしか実行できなくなるのか。

flock()システムコール

flock()やfcntl()といったシステムコールを使って、あるファイルについてロック/アンロックという状態を変更します。

気づき

flock()システムコールなどを使ってシステムロックをアトミック処理にすることで排他制御を実現しているのか。

root@**********:***********# for ((i=0;i<1000;i++)) ; do ./inc-wrong-lock.sh & done; for((i=0;i<1000;i++)); do wait; done
root@**********:***********# cat count
571

root@**********:***********# for ((i=0;i<1000;i++)) ; do ./inc-lock.sh & done; for((i=0;i<1000;i++)); do wait; done
root@**********:***********# cat count
1000

気づき

どこをアトミック処理にするかが肝心だな

出典

感想

特に難しく感じなかったところがまだわかっていないと思う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?