0

可以将 pthread 锁传递给函数吗?我要求这样做的原因是因为我有许多线程,比如说 10 个,充当消费者和 2 个生产者,每个消费者线程都有自己的链表(缓冲区),生产者会将数据发送到其中一个基于特定规则的线程,因此有时生产者 1 发送给消费者 1,然后发送给消费者 2,然后再发送给消费者 1,依此类推。

所以我在想这个,

当生产者 1 想要发送给消费者 5 时,

  1. Producer 1调用函数linked-list来共享数据(IPC)并将lock[5]传递给这个函数,在这种情况下它将是lock 5
  2. 函数linked-list将锁定lock[5]并更新链表
  3. 当消费者 5 调用函数链表时,它将传递它的锁(消费者 5 将始终使用 lock[5]),如果生产者已经锁定了这个锁,那么它将等待。

请注意,锁的名称在 main() 中共享

pthread_mutex_t lock[10];

我在 linux 上使用 gcc,如果问题不清楚,请告诉我,因为我描述事物的方式很糟糕。

4

2 回答 2

0

你可以。只要确保传递互斥体的地址。你不能复制它。

于 2012-12-25T20:02:54.760 回答
0

你可以好好想想。您创建另一个 c 文件并插入:

pthread_mutex_t lock[10];
type_t *produce(int tid) {

if (tid == {producer_1}) {
    //call function linked-list to share the data (IPC) and pass lock[5] to this function, in this case it will be lock 5
}
...
}

void consume(type_t* data, int tid) {
....
}

通过这种方式,您可以集中处理以使您的程序更具可读性和简单性。在您的线程中,您只需申请produceconsume使用生产者/消费者 ID

于 2012-12-25T21:38:24.327 回答