posix 线程(2)信号量同步
来源:互联网 发布:今日股市数据 编辑:程序博客网 时间:2024/06/01 08:27
#include<semaphore.h>int sem_init(sem_t *sem , int pshared , unsigned int value);
这个函数初始化有sem指向的信号量对象,设置它的共享选项,并给它一个初始化的整数值。pshared参数控制信号量的类型,如果其值为 0,
就表示这个信号量是当前进程的局部信号量。否则这个信号量就可以在多个线程之间共享。
#include<semaphore.h>int sem_wait(sem_t *sem);int sem_post(sem_t *sem);
这两个函数都以一个指针为参数,该指针指向的对象是由sem_init调用初始化的信号量。
sem_post函数的作用是以原子操作的方式给信号量的值加1.
sem_post函数的作用是以原子操作的方式给信号量的值减1.
#include<semaphore.h>int sem_destroy(sem_t *sem);
这个函数的作用是用完信号量后对它进行清理。
#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <string.h>#include <pthread.h>#include <semaphore.h>void *thread_function(void *arg);sem_t bin_sem;#define WORK_SIZE 1024char work_area[WORK_SIZE];int main() { int res; pthread_t a_thread; void *thread_result; res = sem_init(&bin_sem, 0, 0); if (res != 0) { perror("Semaphore initialization failed"); exit(EXIT_FAILURE); } res = pthread_create(&a_thread, NULL, thread_function, NULL); if (res != 0) { perror("Thread creation failed"); exit(EXIT_FAILURE); } printf("Input some text. Enter 'end' to finish\n"); while(strncmp("end", work_area, 3) != 0) { fgets(work_area, WORK_SIZE, stdin); sem_post(&bin_sem); } printf("\nWaiting for thread to finish...\n"); res = pthread_join(a_thread, &thread_result); if (res != 0) { perror("Thread join failed"); exit(EXIT_FAILURE); } printf("Thread joined\n"); sem_destroy(&bin_sem); exit(EXIT_SUCCESS);}void *thread_function(void *arg) { sem_wait(&bin_sem); while(strncmp("end", work_area, 3) != 0) { printf("You input %d characters\n", strlen(work_area) -1); sem_wait(&bin_sem); } pthread_exit(NULL);}
- posix 线程(2)信号量同步
- 同步(二)Posix信号量
- 信号量进行同步(linux POSIX的实时扩展,用于线程)!
- 线程同步与互斥:POSIX无名信号量
- 线程同步与互斥:POSIX无名信号量
- 同步——Posix信号量
- 线程同步---信号量(无名)
- boost线程同步(2)——条件变量(POSIX)
- POSIX线程同步
- POSIX线程之同步
- POSIX线程的同步
- POSIX线程同步
- POSIX线程(2)
- Linux系统编程——线程同步与互斥:POSIX无名信号量
- 【Linux系统编程】线程同步与互斥:POSIX无名信号量
- APUE笔记---线程同步之互斥锁、读写锁、条件变量、POSIX信号量
- Linux系统编程——线程同步与互斥:POSIX无名信号量
- 线程同步(信号量,互斥,条件变量)2
- jdk与jre的区别
- 用cocos2d-x做一个简单的windows phone 7游戏:更猛的怪兽和更多的关卡(三)
- ORA-22285: 对不存在的目录或文件进行 FILEOPEN 操作 ORA-06512: 在 "SYS.DBMS_LOB", line 523 ORA-06512: 在 line 6 查看错误堆
- c语言夜未眠2——实现撤销和重做
- 使用 Windows Server AppFabric 缓存编写 ASP.NET 应用程序
- posix 线程(2)信号量同步
- UNP函数笔记十六: 线程
- 最大值最小化
- matlab坐标轴的设置
- Struts2 自定义拦截器 实现简单权限检查
- 如何使用真机调试Android应用
- struts2 常用迭代判断标签
- 获取桌面路径、应用程序常用存放数据目录
- oracle 复习