「アトミック」の版間の差分
提供: C言語入門
行41: | 行41: | ||
* [[C言語のマルチスレッドプログラミング]] | * [[C言語のマルチスレッドプログラミング]] | ||
* [[pthread_mutex_lockとAtomic型修飾子の比較]] | * [[pthread_mutex_lockとAtomic型修飾子の比較]] | ||
+ | * [[スレッドセーフ]] | ||
<!-- vim: filetype=mediawiki | <!-- vim: filetype=mediawiki | ||
--> | --> |
2016年4月16日 (土) 10:55時点における最新版
アトミック (atomic) とは、不可分、原子的であることです。「あるオペレーション」を「ほかのオペレーション」で割り込むことができないことを言います。
読み方
- アトミック
- あとみっく
- atomic
- あとみっく
概要
アトミック操作は、途中に割り込まれない操作です。
銀行口座の入金や出金の処理は、排他制御が必要なクリティカルセクションがあります。排他制御を行いアトミック性を確保します。
ロック
アトミック性を実現するために、ロックが利用されます。 ロックは、セマフォ(Semaphore)やミューテックス(Mutex)が利用されます。
C言語でのアトミックな処理
C11では、 _Atomic と呼ばれるアトミック型修飾子が追加され、アトミック操作(アトミックオペレーション)用のライブラリが提供されました。 ヘッダファイル stdatomic.h をインクルードすることで、_Atomic 型修飾子とアトミックオペレーションの関数を利用します。
C言語のアトミック変数の利用の例
/* * stdatomic1.c * Copyright (C) 2016 kaoru <kaoru@localhost> */ #include <stdatomic.h> #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { _Atomic int x; _Atomic int x; _Atomic int y = ATOMIC_VAR_INIT(255); // 変数の初期化 x = y; // 代入 exit(EXIT_SUCCESS); }