やあみんな私は誰かが少し助けを提供できるかどうか疑問に思っていました。
私は自分自身にpthreadを教えようとしてきましたが、それを使用して、不正なデータの読み取りと書き込みを行わずに、スレッドを一緒に実行して同じ構造を使用するようにミューテックスロックを使用します。
現時点での私の問題は、
スレッド関数から、次のようなヘルパー関数を呼び出すと、次のようになります。
void foo(void *arg)
{
Bar *bar = arg;
pthread_mutex_lock(&mutex);
bar->something = 1;
pthread_mutex_unlock(&mutex);
}
上記のヘルパーメソッドは、構造を「更新」していないようです。
しかし、スレッド関数で同じコードを実行すると、これとまったく同じ4行が機能するようです。
私は何が間違っているのですか?または、これを修正するにはどうすればよいですか?誰かが同様にいくつかの読書を提供することができれば、それは完璧でしょう。
編集:私のコードのタイプミスでしたごめんなさい。
これが私が構造に使用している実際のコードです。
typedef struct {
char *buffer[CAR_PARK_SIZE];
char *arrival_time[CAR_PARK_SIZE];
int keep_running;
int size;
int index;
} CarStorage;
typedef struct {
CarStorage parks;
CarStorage queue;
int busy;
} CarPark;
pthread_mutex_t mutex;
void addCar(char *car, void *arg)
{
CarPark *_cp = arg;
pthread_mutex_lock(&mutex);
printf("Trying to increase size\n");
_cp->parks.size = _cp->parks.size+1;
pthread_mutex_unlock(&mutex);
}
addCarの同じ行がスレッド関数にある場合はサイズが大きくなりますが、このヘルパー関数にある場合は大きくなりません。
これが呼び出しコードです
void *carpark_t(void *arg)
{
CarPark *_cp = arg;
while (_cp->parks.keep_running)
{
if (_cp->queue.size > 0)
{
addCar(_cp->queue.buffer[_cp->queue.index % MAX_QUEUE], &_cp);
sleep(1);
}
else
{
printf("[C] no cars in queue\n");
sleep(5);
}
}
}