将pthread_mutex_t传递给函数

时间:2012-12-25 19:44:49

标签: c multithreading ipc

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

所以我在想这个,

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

  1. 生产者1调用函数linked-list共享数据(IPC)并将lock [5]传递给此函数,在这种情况下它将是lock 5
  2. 功能链表将锁定锁[5]并更新链表
  3. 当消费者5调用函数linked-list时,它将通过其锁定(consumer5将始终使用lock [5]),如果生产者已锁定此锁定,则它将等待。
  4. 请注意,锁的名称在main()

    中共享
    pthread_mutex_t lock[10];
    

    我在linux上使用gcc,如果问题不清楚,请告诉我,因为我有一种可怕的描述方式。

2 个答案:

答案 0 :(得分:0)

你可以。只需确保传递互斥锁的地址。你无法复制它。

答案 1 :(得分: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