代码

#define LEFT 30000000
#define RIGHT 30000200
#define SIZE 4pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
//0代表池中没有任务 >0 代表有任务 -1代表全部计算完成
int nPool = 0;void * Fun(void *p)
{int nNum;int Flag;int j;while(1){Flag = 1;pthread_mutex_lock(&mutex);while(0 == nPool && -1 != nPool){pthread_cond_wait(&cond, &mutex);/*pthread_mutex_unlock(&mutex);sched_yield();pthread_mutex_lock(&mutex);*/}nNum = nPool;nPool = 0;//必须唤醒所有的线程 因为main线程在里面pthread_cond_broadcast(&cond);pthread_mutex_unlock(&mutex);if(RIGHT == nNum || -1 == nNum){nPool = -1;break;}for(j = 2; j < nNum/2; j++){if(0 == nNum % j){Flag = 0;}}if(Flag){printf("[%d] %d is a prime\n", (int)p, nNum);}}printf("%d Out \n", (int )p);pthread_exit(NULL);
}int main()
{pthread_t tid[SIZE];int i,err;for(i = 0 ; i < SIZE; i++){err = pthread_create(tid+i, NULL, Fun, (void *)i);if(err){fprintf(stderr, "create()%s ", strerror(err));exit(1);}}for(i = LEFT; i <= RIGHT; i++){pthread_mutex_lock(&mutex);while(0 != nPool && -1 != nPool){pthread_cond_wait(&cond, &mutex);/*pthread_mutex_unlock(&mutex);sched_yield();pthread_mutex_lock(&mutex);*/}if(-1 != nPool)nPool = i;//下面四个线程 任意唤醒一个pthread_cond_signal(&cond);pthread_mutex_unlock(&mutex);}for(i = 0; i < SIZE; i++){pthread_join(tid[i], NULL);}pthread_mutex_destroy(&mutex);pthread_cond_destroy(&cond);return 0;
}

条件变量对多线程求素数的改进相关推荐

  1. java线程条件变量_多线程同步条件变量(转载)

    最近看<UNIX环境高级编程>多线程同步,看到他举例说条件变量pthread_cond_t怎么用,愣是没有看懂,只好在网上找了份代码,跑了跑,才弄明白 #include #include ...

  2. linux多进程条件变量,Linux 多线程条件变量同步

    条件变量是线程同步的另一种方式,实际上,条件变量是信号量的底层实现,这也就意味着,使用条件变量可以拥有更大的自由度,同时也就需要更加小心的进行同步操作.条件变量使用的条件本身是需要使用互斥量进行保护的 ...

  3. java线程条件变量_使用条件变量(多线程笔记)

    条件变量属性: 使用条件变量可以以原子方式阻塞线程,知道某个特定条件为真为止.条件变量始终与互斥锁一起使用. 使用条件变量,线程可以以原子方式阻塞,知道满足某个条件为止.对掉件的测试时在互斥锁的保护下 ...

  4. 使用条件变量(多线程编程笔记)

    条件变量属性 使用条件变量可以以原子方式阻塞线程,直到某个特定条件为真为止.条件变量始终 与互斥锁一起使用. 使用条件变量,线程可以以原子方式阻塞,直到满足某个条件为止.对条件的测试是 在互斥锁(互斥 ...

  5. linux 多线程条件变量,linux多线程之条件变量

    假设有共享的资源sum,与之相关联的mutex 是lock_s.假设每个线程对sum的操作很简单的,与sum的状态无关,比如只是sum++.那么只用mutex足够了.程序员只要确保每个线程操作前,取得 ...

  6. linux线程同步(2)-条件变量

    一.概述                                                    上一篇,介绍了互斥量.条件变量与互斥量不同,互斥量是防止多线程同时访问共享的互斥变量来保 ...

  7. C++ 标准库 条件变量:condition_variable、condition_variable_any

    原文链接:并发之(条件变量:condition_variable.condition_variable_any) 一.Condition Variable(条件变量)的意图 在前文的文章中,我们有一个 ...

  8. boost条件变量使用

    C++ BOOST库 条件变量[多线程通信]机制 笔记 1相关理念 (1)类名 条件变量和互斥变量都是boost库中被封装的类. (2)条件变量 条件变量是thread库提供的一种等待线程同步的机制, ...

  9. C++多线程快速入门(三):生产者消费者模型与条件变量使用

    互斥锁完成 #include <iostream> #include <deque> #include <thread> #include <mutex> ...

  10. linux C语言多线程库pthread中条件变量的正确用法逐步详解

    linux C语言多线程库pthread中条件变量的正确用法: 了解pthread常用多线程API和pthread互斥锁,但是对条件变量完全不知道或者不完全了解的人群. 关于条件变量的典型应用,可以参 ...

最新文章

  1. HTML Add-on HTML 查看器/编辑器查看器
  2. JavaFX技巧3:使用回调接口
  3. python实例化对象做实参_如何在Python中记住类实例化?
  4. python隐藏启动台_如何在Python中启动后台进程?
  5. 【每日蓝桥】2、一三年省赛JavaC组真题“组素数”
  6. IntelliJ IDEA字符串常量长度太长的问题解决:constant string too long
  7. 自动化(YUM/编译)安装PHP(5.3/5.5/7.0/7.1)脚本
  8. Linux基础命令---检查密码文件pwck
  9. Android配置http请求
  10. linux fb设备驱动,Linux FB 驱动讲解
  11. 12个超好用的IntelliJ IDEA 插件!你用过几个?
  12. toString方法;ToStringBuilder
  13. 机器人语音---走进优必选
  14. 浅述狭义相对论的钟慢效应和尺缩效应
  15. PKM个人知识管理整理(一)
  16. FastJson耗时
  17. 第十四篇,STM32的CAN总线通信
  18. ios项目中调用百度地图iphone版与百度地图HDipad版的坑
  19. C# 打印小票 POS
  20. 设立有限公司需要具备的条件

热门文章

  1. 验证是否精通Redis,从这八个问题开始
  2. 修复/boot及/etc/fstab、自制linux、编译安装内核
  3. 最后的答辩之银行电话营销响应模型
  4. RSync实现文件同步备份配置详解
  5. 【用户】create_user_with_sshkey.sh
  6. 关于web页面中mata各种标签的解释
  7. 18th, Oct 端正心态,积蓄实力,等待爆发的一刻
  8. java array to list iterator_Iterator to list的三种方法
  9. xampp apache windows10 同一局域网下他人访问本地项目
  10. PHP中preg_match_all正则匹配出需要的内容