natsuの秘密基地です
カレンダー
10 | 2024/11 | 12 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
カテゴリー
プロフィール
HN:
natsu
性別:
男性
趣味:
酒など
自己紹介:
ここに書かれていることはフィクションです。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ロックをしたいとき、
どんな方法がとれるのか調べてみたけど、
以下の3つからどれにしようかといったところ。
・@synchronized
・POSIX mutex
・spin lock
なにも考えずにやりたい場合、
普通は@synchronizedでやればいいんだと思う。
POSIXのmutexも特になんも考えなくていいと思う。
spin lockはなんか、もっと低レベルの仕組みなんだと思う。
ドライバ書いたりする人はこんなの使うんでしょ。
ちょいと調べる限り、
ロックで待ってる間はビジーループで回るとかなんか書いてあるけど、
最近の実装じゃ、もっとうまいことやるでしょ。
きっと。
ほかのスレッドにCPU渡したり。
spin lockは実際に使わないと思うけど、
実験だし使ってみる。
計測計測。
ロックかけて
インクリメント
ロック外す
を10000回まわしてみる。
インクリメントすらスレッドセーフではない世の中。
何を信じればいいのか。
阿弥陀様を信じればいいと思うよ。
さて。計測計測。
一応すべての方法で、ロックがうまいこといくのは確認。
ロックなし
大体 0.035ms
@synchronized
大体1.84ms
POSIX mutex
大体0.65ms
spin lock
大体0.29ms
10000回連続でロックとアンロックをやってるので、
なんとかテクノロジ的なもので、
2回目以降は速くなるのかもしれないけど。
一回あたりのロックは
@synchronizedでも計測する意味が無いレベルだと思う。
とりあえず、
普通に使う分ではどれでも問題ない気はした。
すくなし、
@synchronizedなんて遅くて使えないよー。
なんてことは、いわないと思う。
PR
この記事にコメントする