文档章节

多线程之 pthread_cond_*

老汉-憨憨
 老汉-憨憨
发布于 2017/07/24 11:47
字数 234
阅读 8
收藏 0
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

pthread_mutex_t count_mutex     = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t  condition_var   = PTHREAD_COND_INITIALIZER;

void *functionCount1();
void *functionCount2();
int  count = 0;
#define COUNT_DONE  10
#define COUNT_HALT1  3
#define COUNT_HALT2  6

main()
{
   pthread_t thread1, thread2;

   pthread_create( &thread1, NULL, &functionCount1, NULL);
   pthread_create( &thread2, NULL, &functionCount2, NULL);

   pthread_join( thread1, NULL);
   pthread_join( thread2, NULL);

   printf("Final count: %d\n",count);

   exit(EXIT_SUCCESS);
}

// Write numbers 1-3 and 8-10 as permitted by functionCount2()

void *functionCount1()
{
   for(;;)
   {
      // Lock mutex and then wait for signal to relase mutex
      pthread_mutex_lock( &count_mutex );

      // Wait while functionCount2() operates on count
      // mutex unlocked if condition varialbe in functionCount2() signaled.
      pthread_cond_wait( &condition_var, &count_mutex );
      count++;
      printf("Counter value functionCount1: %d\n",count);

      pthread_mutex_unlock( &count_mutex );

      if(count >= COUNT_DONE) return(NULL);
    }
}

// Write numbers 4-7

void *functionCount2()
{
    for(;;)
    {
       pthread_mutex_lock( &count_mutex );

       if( count < COUNT_HALT1 || count > COUNT_HALT2 )
       {
          // Condition of if statement has been met. 
          // Signal to free waiting thread by freeing the mutex.
          // Note: functionCount1() is now permitted to modify "count".
          pthread_cond_signal( &condition_var );
       }
       else
       {
          count++;
          printf("Counter value functionCount2: %d\n",count);
       }

       pthread_mutex_unlock( &count_mutex );

       if(count >= COUNT_DONE) return(NULL);
    }

}

编译输出:

cc     pthread3.c   -o pthread3 -lpthread

#输出:
Counter value functionCount1: 1
Counter value functionCount1: 2
Counter value functionCount1: 3
Counter value functionCount2: 4
Counter value functionCount2: 5
Counter value functionCount2: 6
Counter value functionCount2: 7
Counter value functionCount1: 8
Counter value functionCount1: 9
Counter value functionCount1: 10
Final count: 10

 

本文转载自:http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html

共有 人打赏支持
下一篇: POSIX线程
老汉-憨憨
粉丝 19
博文 322
码字总数 68382
作品 0
深圳
程序员
私信 提问
【原创】手把手教你Linux下的多线程设计--Linux下多线程编程详解(四)

本文可任意转载,但必须注明作者和出处。 【原创】手把手教你Linux下的多线程设计(四) --Linux下多线程编程详解 原创作者:Frozen_socker(冰棍) E_mail:dlskyfly@163.com 线程同步 首先来...

gaoshouma
2007/07/11
0
0
浅谈 linux 多线程编程和 windows 多线程编程的异同

很早以前就想写写linux下多线程编程和windows下的多线程编程了,但是每当写时又不知道从哪个地方写起,怎样把自己知道的东西都写出来,下面我就谈谈linux多线程及线程同步,并将它和windows...

红薯
2011/03/24
4.7K
1
深入理解 pthread_cond_wait()

在多线程同步互斥的应用场景下,通常会用到pthreadcondwait()和pthreadcondsignal()函数。那么这两个函数到底是如何保证互斥同步的呢? 为了对上面的问题有个直观的了解,可以从下面的问题着...

存储之厨
2017/08/01
0
0
Linux环境编程--多线程

本文作者: 姚继锋 (2001-08-11 09:05:00) 时隔多年 原文地址已经无从查。。。 居然是2001年就写了 今天看来对初学者还是很有参考意义 所以特转给大家 本人在原文基础上适当修改 1 引言 线程(...

晨曦之光
2012/03/09
137
0
linux多线程学习(五)---条件变量

1. 相关函数 #include pthread_cond_t cond = PTHREAD_COND_INITIALIZER; int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr); int pthread_cond_signal(pthread......

长平狐
2012/09/03
96
0

没有更多内容

加载失败,请刷新页面

加载更多

学习心得《稻盛和夫经营学》的读后感2300字

学习心得《稻盛和夫经营学》的读后感2300字: 作者:张宪军;稻盛和夫信奉明朝王阳明的一句话:良知没处,万法难度。人们把它理解为管理者要有在纯正心态下要有好的做事方法,不然是很难成功...

原创小博客
15分钟前
0
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
37分钟前
1
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
1
0
HashTable和Vector为什么逐渐被废弃

HashTable,不允许键值为null,还一个就是put方法使用sychronized方法进行线程同步,单线程无需同步,多线程可用concurren包的类型。 如编程思想里面说的作为工具类,封闭性做的不好没有一个...

noob_chr
昨天
1
0
Win10 下安装Win7双系统

很多人买了预装64位Win8/8.1的电脑后想重装(或者再安装一个)Win7系统,但是折腾半天发现以前的方法根本不奏效。这是因为预装Win8/8.1的电脑统一采用了UEFI+GPT引导模式,传统的BIOS(Legacy...

yaly
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部