これは私の最初のスレッドCでの試みです。私は循環的に制限されたバッファを作成しています。私はスレッドを作成する方法を知っているが、私は唯一の見てきたすべての例は、1つのボイドパラメータを受け入れる関数をスレッド化しているが、残念ながら私の労働者の仕様は、ここに示すように、3を使用するように私を必要とします。ここでは複数の引数をスレッド関数に渡すpthread_create
void bufferRead(BoundedBuffer* buffer, char* data, int count) {
pthread_mutex_lock(&buffer->mutexBuffer);
<snip>
pthread_mutex_unlock(&buffer->mutexBuffer);
}
は私のpthread_createです声明
pthread_create(&buffer.readThread, NULL, (void *)bufferRead, &readParams)
そして、私のreadParams構造体/割り当て
struct readThreadParams {
BoundedBuffer b;
char* data;
int count;
};
struct readThreadParams readParams;
readParams.b = buffer2;
readParams.data = out_array;
readParams.count = in_size;
Bに通過した後、構造体の各パラメータを割り当てる方法上の任意のアドバイスufferRead関数は非常に高く評価されます。
-1ローカル変数を別のスレッドに渡します。 –
問題がないmain変数のローカル変数です。 mainを終了すると、プログラムは終了し、プログラムが実行されている間は常に変数が存在します。 – jcoder
@jcoder 'main'を残しても、プログラムが即座に終了するわけではありません。また、スレッド間通信のための自動(非ヒープ、非静的)変数は、最高で疑わしいアイデアです。 –