加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 重用线程pthread

发布时间:2020-12-14 01:23:34 所属栏目:Linux 来源:网络整理
导读:我有一个程序,它不断地完成一些工作(比如服务器)和几个线程.哪个是从pthread库重用线程的正确方法?或者我每次都被迫创建一个新线程.我想至少重用pthread_t结构.我在考虑这样的事情: int main() { pthread_t threads[some value]; while (1) { get work; fi
我有一个程序,它不断地完成一些工作(比如服务器)和几个线程.哪个是从pthread库重用线程的正确方法?或者我每次都被迫创建一个新线程.我想至少重用pthread_t结构.我在考虑这样的事情:

int main() {
   pthread_t threads[some value];
   while (1) {
       get work;
       find a free thread;
       pthread_create(free thread,do work);
       pthread_join(done threads);
   }

但我不知道如何正确释放线程或如何检查它是否是免费的.

解决方法

只需编写线程代码即可完成任何需要完成的工作.不要继续创建和连接线程.最简单的方法是使用 thread pool – 线程集合和线程安全的作业队列.池中的每个线程从队列中获取作业,完成该作业,然后等待另一个作业.

对于POSIX线程,通常使用互斥锁来保护队列,使用条件变量来允许线程等待工作.您可能需要一个布尔变量来跟踪程序是否正在关闭.

在伪代码中,每个线程执行此操作:

>获取互斥锁.
>检查程序是否正在关闭,如果是,请释放互斥锁并终止.
>检查队列是否为空.如果是,则阻止条件变量并转到步骤2.
>从队列中取出最高职位.
>释放互斥锁.
>做好这份工作.
>转到第1步.

要求线程完成工作,请执行以下操作:

>分配新的工作对象.
>填写要完成的工作(可以是指向函数的指针和该函数的参数).
>获取互斥锁.
>将作业添加到队列中.
>发信号通知条件变量.
>释放互斥锁.

去关机:

>获取互斥锁.>将关闭布尔值设置为true.>广播条件变量.>释放互斥锁.>加入所有主题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读