多线程的广播

 1 #include <pthread.h>
 2 #include <stdio.h>
 3 #include <unistd.h>
 4
 5 //static     int x = 0;
 6 pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
 7 pthread_cond_t  cond1  = PTHREAD_COND_INITIALIZER;
 8
 9 void* doit(void *p)
10 {
11     sleep(*(int *)p);
12     pthread_mutex_lock(&mutex1);
13     //if( x == 0)
14     {
15         printf("pthread_id: %d, wait for command.\n", pthread_self());
16         pthread_cond_wait(&cond1,&mutex1);
17     }
18     printf("I %d got command,let‘s go.\n", pthread_self());
19     pthread_mutex_unlock(&mutex1);
20     return NULL;
21 }
22
23
24 int main()
25 {
26     pthread_t pth_array[5];
27
28     int i=0;
29     for(;i<5;i++)
30     {
31         pthread_create(&pth_array[i],NULL,doit,&i);
32     }
33
34
35     pthread_mutex_lock(&mutex1);
36
37     pthread_cond_broadcast(&cond1);
38     pthread_mutex_unlock(&mutex1);
39
40
41     i=0;
42     for(;i<5;i++)
43     {
44         pthread_join(pth_array[i],NULL);
45     }
46
47     return 0;
48 }

如果发出信号(pthread_cond_signal, pthread_cond_broadcast)时,没有线程在条件变量的wait

中等待,则这个信号丢失,其他线程走到wait时,投入睡眠状态。

此处可以增加一个x,广播中其值取线程数,线程里判断如果其值为0,则等待,否则对其减一,表示收到。   因此,我认为条件变量应该伴随一个全局变量一起使用。

时间: 2024-07-30 13:34:00

多线程的广播的相关文章

Android中使用多线程的各种姿势

写在前面:内容主要为黄岳钊老师视频分享课的学习笔记. 1)为什么需要多线程处理? 解决耗时任务 文件IO.联网请求.数据库操作.RPC 提高并发能力 同一时间处理更多事情 防止ANR InputDispatching Timeout:输入事件分发超时5s(触摸或按键) Service Timeout:服务20s内未执行完 BroadcastQueue Timeout:前台广播10s内未执行完 ContentProvider Timeout:内容提供者执行超时 避免掉帧 要达到每秒60帧,每帧必须

android开发之多线程实现方法概述

一.单线程模型 当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,如:用户的按键事件,用户接触屏幕的事件以及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理.所以主线程通常又被叫做UI线程. 在开发Android 应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行. 如果在非UI线程中直接操作UI线程,会抛出android.view.ViewRoot$Call

多线程学习之初体验

大家好~,我是Camellian.最近初涉多线程,因为是刚接触,还有待提高,故先把刚刚整理的笔记拿出来跟大家分享下,希望各位路过的大神们,多多指教 那好,下面我们进入正题,首先学习下进程和线程的概念: (1) iOS中一个运行的程序就是一个进程或者叫做一个任务 (2)一个进程至少包含一个线程,线程是程序的执行流 线程是程序执行的最小单元———它能占用内存和cpu,从而开展运算. (3)iOS程序启动时,在创建一个进程的同时, 会开始运行一个线程,该线程被称为主线程. 注意:主线程是其他线程最终的

Linux 的多线程编程的高效开发经验(转)

http://www.ibm.com/developerworks/cn/linux/l-cn-mthreadps/ 背景 Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别.不注意这些 Linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断.本文中我们从 5 个方面总结出 Linux 多线程编程上的问题,并分别引出相关改善的开发经验,用以避免这些的陷阱.我们希望这些经验可以帮助读者们能更好更快的熟悉 Linux 平台的多线程

windows多线程同步

概述 任何单个应用程序都不能完全使该处理器达到满负荷.当一个线程遇到较长等待时间事件时,同步多线程还允许另一线程中的指令使用所有执行单元.例如,当一个线程发生高速缓存不命中,另一个线程可以继续执行.同步多线程是 POWER5? 和 POWER6? 处理器的功能,可与共享处理器配合使用. SMT 对于商业事务处理负载的性能优化可达30%.在更加注重系统的整体吞吐量而非单独线程的吞吐量时,SMT 是一个很好地选择. 但是并非所有的应用都能通过SMT 取得性能优化.那些性能受到执行单元限制的应用,或者

【腾讯Bugly干货】Android性能优化典范之多线程篇

本文涉及的内容有:多线程并发的性能问题,介绍了 AsyncTask,HandlerThread,IntentService 与 ThreadPool 分别适合的使用场景以及各自的使用注意事项,这是一篇了解 Android 多线程编程不可多得的基础文章,清楚的了解这些 Android 系统提供的多线程基础组件之间的差异以及优缺点,才能够在项目实战中做出最恰当的选择. 1. Threading Performance 在程序开发的实践当中,为了让程序表现得更加流畅,我们肯定会需要使用到多线程来提升程

Linux多线程服务端编程:使用muduo C++网络库

内容推荐本 书主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread.这是在Linux下以native语言编写用户态高性能网络程序最成熟的模式,掌握之后可顺利地开发各类常见的服务端网络应用程序.本书以 muduo网络库为例,讲解这种编程模型的使用方法及注意事项.本书的宗旨是贵精不贵多.掌握两种基本的同步原语就可以满足各种多线程同步的功能需求,还能写出更易用的同步设施.掌

Android实战开发租赁管理软件(适配UI,数据的存储,多线程下载)课程分享

亲爱的网友,我这里有套课程想和大家分享,假设对这个课程有兴趣的,能够加我的QQ2059055336和我联系. 课程内容简单介绍 我们软件是基于移动设备的.所以我们必定的选择了安卓作为我们的开发工具.课程中,我们将简要的介绍Android的基本概念,然后进行我们的实战开发.在开发中,大家讲学习到主要的组件,适配UI,数据的存储,多线程下载,开机广播,闹钟提醒,短信发送等实际项目开发中碰到的实用的知识点.通过课程学习,让大家可以掌握Android软件开发的流程,注意点,及优化.帮助大家迅速的掌握An

android中的多线程机制

Google参考了Windows的消息处理机制,在Android系统中实现了一套类似的消息处理机制.学习Android的消息处理机制,有几个概念(类)必须了解: 1.       Message 消息,理解为线程间通讯的数据单元.例如后台线程在处理数据完毕后需要更新UI,则可发送一条包含更新信息的Message给UI线程. 2.       Message Queue 消息队列,用来存放通过Handler发布的消息,按照先进先出执行. 3.       Handler Handler是Messa