あなたがPartialCodec
を呼び出すされますどのように多くのスレッドを知っていると仮定すると、あなたは、スレッド間の通信を容易にするために、関数内static
変数を使用することができます。裸のstatic
は、PartialCodec
のすべてのスレッドが同じオブジェクトインスタンスを操作できるようにします。
void * PartialCodec (void *arg) {
static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
static struct state {
/* some state */
} critical;
struct state local;
pthread_mutex_lock(&lock);
local = critical; /* make a local copy */
/* update critical */
pthread_mutex_unlock(&lock);
/* ... refer to local copy of state ... */
}
critical
状態は、特定のスレッドが解決すべき問題の部分を追跡します。それをlocal
にコピーすると、そのスレッドが問題のその部分で動作することが確立されます。 critical
の状態が更新され、次のスレッドcritical
が問題の別の部分を処理することがわかります。
出典
2016-04-08 00:33:17
jxh
ここに秘密はありません。 'void *(*)(void *)' - 引数は、スレッドがどの関数を起動するかを決定します.2、 'void *'は、その関数の引数を決定しますされます。 – EOF
すべてのスレッドはPartialCodec関数に自動的に入り、引数はすべてのスレッドで同じです –
あなたはすべてのコードを表示していませんが、 'iTd'はスレッドごとに異なると仮定しています。 'pcMCData'の要素に追加します。 – jxh