将 pthread_mutex_t 传递给函数

Posted

技术标签:

【中文标题】将 pthread_mutex_t 传递给函数【英文标题】:pass pthread_mutex_t to function 【发布时间】:2012-12-25 19:44:49 【问题描述】:

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

所以我在想这个,

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

    生产者 1 调用函数链表来共享数据 (IPC) 并将 lock[5] 传递给该函数,在这种情况下它将是 lock 5 函数链表将锁定锁[5]并更新链表 当消费者 5 调用函数链表时,它将传递其锁(消费者 5 将始终使用 lock[5]),如果生产者已锁定此锁,则它将等待。

请注意锁的名字在main()中是共享的

pthread_mutex_t lock[10];

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

【问题讨论】:

对于这类事情你宁愿使用信号量。 【参考方案1】:

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

【讨论】:

【参考方案2】:

你可以好好想想。 您创建另一个 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 一起应用

【讨论】:

谢谢,你让我有了别的东西,func(struct buff, id) pthread_mutex_lock( &lock[id] );做东西;归还它;

以上是关于将 pthread_mutex_t 传递给函数的主要内容,如果未能解决你的问题,请参考以下文章

Linux 线程锁 pthread_mutex_t

程序中止或退出时是不是释放 pthread_mutex_t*?

使用 JSON 将函数名称传递给函数

spark程序里如果给rdd.map传递一个会返回null的函数,最后rdd里面是会少一个元素还是有为null的元素啊

为啥将 ClientID 传递给 javascript 函数会传递整个控件?

如何将变量传递给评估函数?