開発環境
- OS X Yosemite - Apple (OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- C (プログラミング言語)
- LLVM/Clang (コンパイラ, Xcode - Apple)
コンピュータプログラミングの概念・技法・モデル(IT Architect' Archiveクラシックモダン・コンピューティング6) (IT Architects’Archive CLASSIC MODER)(セイフ・ハリディ (著)、ピーター・ヴァン・ロイ (著)、Peter Van-Roy (著)、 Seif Haridi (著)、羽永 洋 (翻訳) 、翔泳社、原書: Concepts, Techniques, and Models of Computer Programming(CTM))の第1章(プログラミング概念入門)、1.18(練習問題)、10-c.(明示的状態と並列性)をC言語で考えてみる。
10-c.(明示的状態と並列性)
コード(BBEdit, Emacs)
sample10_c.c
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <pthread.h>
#include <stopif.h>
int c = 0;
pthread_mutex_t a_lock = PTHREAD_MUTEX_INITIALIZER;
void* inc() {
pthread_mutex_lock(&a_lock);
int i = c;
sleep(1);
c = i + 1;
pthread_mutex_unlock(&a_lock);
return NULL;
}
int main() {
pthread_t t0;
pthread_t t1;
Stopif(pthread_create(&t0, NULL, inc, NULL) == -1, return 1,
"スレッドt0を作成できません: %s", strerror(errno));
Stopif(pthread_create(&t1, NULL, inc, NULL) == -1, return 1,
"スレッドt1を作成できません: %s", strerror(errno));
void *result;
Stopif(pthread_join(t0, &result) == -1, return 1,
"スレッドt0をジョインできません: %s", strerror(errno));
Stopif(pthread_join(t1, &result) == -1, return 1,
"スレッドt1をジョインできません: %s", strerror(errno));
sleep(10);
printf("%i\n", c);
}
入出力結果(Terminal)
$ crun.sh sample10_c ... 2 $ ./sample10_c && ./sample10_c && ./sample10_c && ./sample10_c && ./sample10_c 2 2 2 2 2 $
0 コメント:
コメントを投稿