嘿伙计们,我想知道是否有人可以提供一点帮助。
我一直在尝试自学 pthreads 和互斥锁,以使线程一起运行并使用相同的结构,而不是读取和写入坏数据。
我现在的问题是,
从我的线程函数中,如果我调用一个可能类似于以下内容的辅助函数:
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);
}
}
}