スレッドはグローバルは変数は共有しますが、マルチスレッドアプリケーションにおいて、スレッド固有のデータを保持したい場合があります。それを実現するのが、スレッドローカルストレージ(TLS)です。 func()を2つのスレッドとして作成します。そこでは、__thread int aとint bをインクリメントした値を表示しています。最初のスレッドではa = 1 b=1、次のスレッドではa = 1 b=2となっています。int aとしたならa=2なるところです。すなわち__thread int aはスレッド固有の変数というわけです。 #include <stdio.h> #include <pthread.h> __thread int a = 0; int b = 0; void *func(void *arg) { a++; b++; printf("a = %d b=%d\n", a, b