文档章节

多线程之 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

共有 人打赏支持
老汉-憨憨
粉丝 18
博文 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.5K
1
深入理解 pthread_cond_wait()

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

存储之厨
2017/08/01
0
0
Linux多线程Pthread学习小结

简介 POSIX thread 简称为pthread,Posix线程是一个POSIX标准线程.该标准定义内部API创建和操纵线程. 作用 线程库实行了POSIX线程标准通常称为pthreads.pthreads是最常用的POSIX系统如Linux...

长平狐
2013/01/06
40
0
Linux多线程Pthread学习小结

简介 POSIX thread 简称为pthread,Posix线程是一个POSIX标准线程.该标准定义内部API创建和操纵线程. 作用 线程库实行了POSIX线程标准通常称为pthreads.pthreads是最常用的POSIX系统如Linux...

晨曦之光
2012/03/02
144
0

没有更多内容

加载失败,请刷新页面

加载更多

搬瓦工最新国内可访问镜像网址:bwh8.net

昨天搬瓦工之前的国内备用镜像网址bwh1.net被域名污染了,在国内打不开了。搬瓦工发布了最新的国内可访问的镜像地址:bwh8.net。 消息来源:搬瓦工优惠网->搬瓦工最新国内可访问镜像网址:b...

flyzy2005
35分钟前
0
0
大数据学习之-NN,SNN和DN的作用

NameNode(名称节点,简称NN)作用: 文件系统命名空间,维护文件系统目录树 存储文件名称, 文件目录结构, 文件属性(权限,大小,创建时间,副本数及大小....), 文件对应的数据块及这些块所...

hnairdb
39分钟前
1
0
TypeScript基础入门之声明合并(三)

转发 TypeScript基础入门之声明合并(三) 声明合并 将命名空间与类,函数和枚举合并 命名空间足够灵活,也可以与其他类型的声明合并。 为此,命名空间声明必须遵循它将与之合并的声明。 生成的...

durban
46分钟前
0
0
webSocket前台实现

webSocket前台实现 简单实现: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="application/javascript" src="js/base64.js"></script......

Airship
57分钟前
1
0
从零到一,使用实时音视频 SDK 一起开发一款 Zoom 吧

zoom(zoom.us) 是一款受到广泛使用的在线会议软件。相信各位一定在办公、会议、聊天等各种场景下体验或者使用过,作为一款成熟的商业软件,zoom 提供了稳定的实时音视频通话质量,以及白板、...

七牛云
58分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部