2015年22週目まとめ
今週まとめ
Cでのマルチスレッド処理を調べてる
Cにはクラスが無いので、Threadクラスを継承し、
runメソッドをオーバーライドするといった、いろんな言語でよくあるパターンは使えません。
代わりに、pthread_create関数にコールバック関数を渡すと、
別スレッドから呼び出してくれるため、それを利用して別スレッドを作るようです。
Cでのロック処理を調べている
ロック用変数を作り、pthread_mutex_lock関数を呼ぶことで、ロックをかけられます。
他のスレッドから起こされるまで待つには、
mutexとcond変数を定義して、mutexのロックを取得して、
pthread_cond_waitを呼びます。
一定時間たったら呼ばれて無くても起きて欲しい場合は、
pthread_cond_timedwaitを呼びます。
なお、C++11からmutexオブジェクトといった、
ロックや排他制御が簡単にできる仕組みが導入されています。
C++ではintに[]演算が出来る
元ネタ
http://twitter.com/mattn_jp/status/605245747429179392
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
int main() {
int v[] = {1, 2, 3};
int off = 2;
printf("%d\n", off[v]); // 3
printf("%d\n", 1[v]); // 2
return 0;
}
C++では、intやenum型に対して[]が実行された場合、暗黙的な方変換によりstd::ptrdiff_tに変換されます。
そのため、a[b]は*(a+b)
と同義になり、上の例は*(off+v)
や*(1+v)
と解釈され、
正しく動くようです。
http://en.cppreference.com/w/cpp/language/operator_member_access