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