如何在 C 中 p_threads 之间共享互斥量?

How to Share Mutex Between p_threads in C?

我对这个问题很困惑,我有 10 个线程试图插入队列。 我想使用 queue.h.

中全局定义的互斥锁来防止同时插入多个

我有 2 个队列 waitingworking 我只是给了它一秒钟,尽管给同一个 DS 同一个互斥锁是没有效率的,因为这会阻止并行处理它们,即使没有有问题(如果我错了请纠正我)。

这意味着我需要为队列的每个副本互斥,我尝试在其中定义它:

struct queue
{
    pthread_mutex_t m; //new
    pthread_cond_t c; //new

    int queue_size;
    struct queue_node *head, *tail;
};

但在这种情况下,它不是全局的,因此线程不能与同一个互斥锁相关,我怎样才能轻松解决这个问题?

如果你需要这个:

waiting_buffer = create_queue();
working_buffer = create_queue();


struct queue *create_queue() {
    pthread_mutex_init(&m, NULL); /** initialize mutex **/
    pthread_cond_init(&c, NULL);/** initialize cond **/
    struct queue *q = (struct queue *) malloc(sizeof(struct queue));
    q->head = q->tail = NULL;
    q->queue_size = 0;
    return q;
}

听起来您想要每个队列的互斥锁和条件变量,因此您希望将它们包含在 create_queue 返回的结构中。你这样做了;你只是没有在 create_queue.

中引用它们
// Sets `errno` and returns `NULL` on error.
struct queue *create_queue(void) {
    struct queue *q = (struct queue *)malloc(sizeof(struct queue));
    if (!q)
       return NULL;

    pthread_mutex_init(&(q->m), NULL);
    pthread_cond_init(&(q->c), NULL);
    q->head = q->tail = NULL;
    q->queue_size = 0;
    return q;
}