- 浏览: 763891 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
#include <pthread.h> #include <unistd.h> #include <iostream> using namespace std; int * g_ptr = NULL; pthread_cond_t g_cond = PTHREAD_COND_INITIALIZER; pthread_mutex_t g_mutex; void* testCond(void*) { pthread_mutex_lock(&g_mutex); if(g_ptr==NULL){ pthread_cond_wait(&g_cond,&g_mutex);//block->unlock->wait,返回时再次:lock } cout << "wait finished" << endl; pthread_mutex_lock(&g_mutex); pthread_detach(pthread_self()); return 0; } int main() { if(pthread_mutex_init(&g_mutex,NULL)!=0) { pthread_mutex_destroy(&g_mutex); return -1; } pthread_t pid; pthread_create(&pid,NULL,testCond,NULL); sleep(1); //发出通知 pthread_cond_signal(&g_cond); g_ptr = new int(1); sleep(2); } wait finished
等待超时
#include <pthread.h> #include <unistd.h> #include <iostream> #include <sys/time.h> using namespace std; int * g_ptr = NULL; pthread_cond_t g_cond = PTHREAD_COND_INITIALIZER; pthread_mutex_t g_mutex; void* testCond(void*) { pthread_mutex_lock(&g_mutex); if(g_ptr==NULL) { struct timespec timeEnd; struct timeval timeNow; gettimeofday(&timeNow,NULL); //如果2秒钟没有唤醒则不等待 timeEnd.tv_sec = timeNow.tv_sec+2; //block->unlock->wait,返回时再次:lock pthread_cond_timedwait(&g_cond,&g_mutex,&timeEnd); } cout << "wait finished" << endl; pthread_mutex_lock(&g_mutex); pthread_detach(pthread_self()); return 0; } int main() { if(pthread_mutex_init(&g_mutex,NULL)!=0) { pthread_mutex_destroy(&g_mutex); return -1; } pthread_t pid; pthread_create(&pid,NULL,testCond,NULL); cout << "creat thread" << endl; sleep(5); //发出通知 cout << "send signal" << endl; pthread_cond_signal(&g_cond); g_ptr = new int(1); sleep(5); } creat thread wait finished send signal
相关知识:
http://xingyunbaijunwei.blog.163.com/blog/static/765380672011112293354272/
发表评论
-
滑动窗口与拥塞控制
2017-09-29 14:47 760滑动窗口:用作流量控制: 1.发送端和接收端各维护一个独立的发 ... -
rawsocket发送tcp包
2017-09-25 11:52 984testTcp.h #ifndef TESTTCP_H ... -
柔性数组
2017-09-20 09:53 508#include <iostream> #i ... -
rawsocket发送dns包
2017-09-14 15:18 616#include <stdio.h> #in ... -
rawsocket发送icmp包
2017-09-06 09:54 662#include <stdio.h> #in ... -
netfilter
2016-10-04 20:31 483http://blog.chinaunix.net/uid-2 ... -
gdb的简单使用
2016-09-19 15:18 418注意编译的时间加上-g参数 1.调试运行 gdb a.out ... -
TCP各状态的意义
2016-03-01 14:06 421各个状态的意义如下: LISTEN - 侦听来自远方TCP端 ... -
log
2015-03-30 17:42 452log.h #ifndef __LOG_H__ #def ... -
TIMEWAIT与CLOSEWAIT
2015-03-17 11:32 660http://blog.csdn.net/kobejayand ... -
TcpClient
2015-01-16 17:46 473TcpClient.h #ifndef TCPCLIENT ... -
信号量
2014-09-26 10:20 683#include <semaphore.h> ... -
共享内存
2014-09-17 10:39 599SharedMemory.h #ifndef SHARED ... -
记录锁
2014-09-11 16:32 438#include <errno.h> #in ... -
popen
2014-09-06 14:50 641#include <stdio.h> #in ... -
大小端存储
2014-09-05 09:29 603#include <stdio.h> i ... -
读写锁
2014-09-01 10:33 730#include <pthread.h> # ... -
trylock
2014-09-01 10:07 669#include <pthread.h> # ... -
线程分离
2014-09-01 10:00 696http://www.cnblogs.com/mydomain ... -
线程返回值传出
2014-08-31 09:56 534#include <pthread.h> # ...
相关推荐
在上面的示例中,我们首先定义了一个互斥锁mutex和一个条件变量cond。然后,我们创建了两个线程thread1和thread2,分别执行thread_func1和thread_func2函数。 thread_func1和thread_func2函数都包含一个循环,通过...
pthread_cond_wait()函数用于等待条件变量的变化,并自动释放指定的互斥锁。pthread_cond_signal()函数用于发送消息,唤醒一个或多个等待线程。pthread_cond_broadcast()函数则可以唤醒所有等待线程。 pthread_cond...
3. 广播:`pthread_cond_broadcast()`唤醒所有等待在条件变量上的线程。 4. 等待:`pthread_cond_wait()`在释放互斥锁的前提下,将线程置于等待状态,直到收到信号或广播。 5. 销毁:`pthread_cond_destroy()`用于...
181012-27 _ 条件变量sync.Cond
互斥锁、条件变量和信号量是操作系统中用于线程同步和资源管理的重要工具,尤其在多线程和多进程编程中发挥着关键作用。这些机制确保了共享资源的有序访问,防止数据竞争和死锁等问题的发生。 首先,互斥锁(Mutex...
在Linux中,条件变量由`pthread_cond_t`表示,`pthread_cond_init`初始化,`pthread_cond_wait`等待,`pthread_cond_signal`或`pthread_cond_broadcast`唤醒等待的进程。 3. **共享内存**:共享内存是Linux IPC的一...
在C语言中,`pthread_cond_t`表示条件变量,`pthread_cond_init`初始化,`pthread_cond_wait`等待,`pthread_cond_signal`或`pthread_cond_broadcast`用来唤醒等待的进程。 3. **共享内存(Shared Memory)**: ...
181015-28 _ 条件变量sync.Cond (下)
当条件变量被其他线程通过`pthread_cond_signal`或`pthread_cond_broadcast`通知后,等待线程将重新获取互斥锁并继续执行。 5. `pthread_cond_timedwait()` 与`pthread_cond_wait()`相似,但提供了超时机制。如果在...
本文提供了一个跨平台条件变量的封装对象,内部实现主要参考sdl的SDL_cond。 本资源在Windows、Linux、Android、IOS都可以使用 原文链接:https://blog.csdn.net/u013113678/article/details/120469385
多线程编程:条件变量使用。 打包文件包含两个文件:c文件源代码、Makefile文件,运行环境在Ubuntu14.04下,使用自带的gcc编译器,同学们只需将文件夹复制到某一目录下之后在终端执行:1.“make”生成“test”可执行...
- 条件变量提供了单个唤醒(`pthread_cond_signal`)和广播唤醒(`pthread_cond_broadcast`)两种唤醒机制。 2. **条件变量的使用** - 初始化与销毁:`pthread_cond_init`用于初始化条件变量,完成使用后需调用`...
1. **初始化:** 条件变量可以通过静态或动态方式初始化,如`pthread_cond_t cond = PTHREAD_COND_INITIALIZER;` 或 `int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);` 2. **销毁:*...
销毁条件变量使用`pthread_cond_destroy()`函数,但需要注意,只有当没有任何线程正在等待该条件变量时才能执行此操作,否则会返回错误代码EBUSY。 条件变量的两个主要操作是等待和激发。线程等待条件变量有两种...
因此,确保在检查条件变量和调用`pthread_cond_wait()`之间没有其他线程修改了条件至关重要。 5. **条件变量的作用**:条件变量的作用不是为了提供互斥,而是为了在线程间传递特定的信号,告知线程某些条件已满足,...
销毁条件变量使用 `pthread_cond_destroy()`,但需要注意,只有当没有线程在等待时才能执行此操作,否则会返回 `EBUSY` 错误。 **2. 等待和激发** 线程可以使用 `pthread_cond_wait()` 或 `pthread_cond_timedwait...
条件变量(Condition Variables)是线程同步的一种工具,它允许线程在满足特定条件时等待,只有当其他线程改变了这个条件,等待的线程才会被唤醒。条件变量与互斥锁(Mutexes)配合使用,可以实现更灵活的线程同步...
在这个项目中,"thread_pool.c"可能是实现线程池核心功能的源代码,"thread_mutex.c"涉及互斥锁的相关操作,"thread_cond.c"实现了条件变量的功能,"main.c"是程序的入口,负责初始化线程池、提交任务以及销毁线程池...
关键概念包括线程创建(pthread_create)、线程主函数(pthread_main)、线程同步(如互斥锁mutex、条件变量cond和信号量semaphore)以及线程退出和资源清理(pthread_join)。 **Windows多线程编程** Windows平台...
理解线程的创建、同步(如互斥锁mutex、条件变量cond)和通信(如信号量semaphore)将有助于实现多用户同时交互的功能。 此外,错误处理是任何C程序的重要组成部分。学习者应学会如何使用errno全局变量和perror()...