pthread 笔记
1.创建线程
res = pthread_create(&a_thread, NULL, thread_function1, NULL);
if (res != 0)
{
perror("Thread creation failure");
}
2.等待线程结束
pthread_join
3.线程退出时,语句:
pthread_exit(NULL);
return NULL; 4. 互斥锁 使用前必须初始化!!!
pthread_mutex_init(&mutex, NULL);
pthread_mutex_destroy(&mutex);
4.
#include <stdio.h>
#ifdef _WIN32
#include <windows.h>
#include <stdio.h>
#define sleep Sleep
#else
#include <unistd.h>
#endif
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <semaphore.h> sem_t bin_sem;
void *thread_function1(void *arg)
{
printf("thread_function1--------------sem_wait\n");
sem_wait(&bin_sem);
printf("sem_wait OK\n");
while ()
{
}
pthread_exit(NULL);
return NULL;
} void *thread_function2(void *arg)
{
printf("thread_function2--------------sem_post\n");
sem_post(&bin_sem);
printf("sem_post\n");
while ()
{
}
return NULL;
} int main()
{
int res;
pthread_t a_thread;
void *thread_result; res = sem_init(&bin_sem, , );
if (res != )
{
perror("Semaphore initialization failed");
}
printf("sem_init\n");
res = pthread_create(&a_thread, NULL, thread_function1, NULL);
if (res != )
{
perror("Thread creation failure");
}
printf("thread_function1\n");
sleep ();
printf("sleep\n");
res = pthread_create(&a_thread, NULL, thread_function2, NULL);
if (res != )
{
perror("Thread creation failure");
}
while ()
{
}
}
5 sem:
sem_post 每执行一次 则加1
sem_wait( &st ) 等待直到st大于1 才向下执行, 每次执行st减去1;
6 条件锁
#include <pthread.h>
#include <stdio.h>
#ifdef _WIN32
#include <windows.h>
#define sleep(p) Sleep(p)
#else
#include <ustlib.h>
#define sleep(p) usleep((p)*1000)
#endif pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /*初始化互斥锁*/
pthread_cond_t cond = PTHREAD_COND_INITIALIZER; //初始化条件变量 void *thread1(void *);
void *thread2(void *); int i = ;
int main(void)
{
pthread_t t_a;
pthread_t t_b;
pthread_create(&t_a, NULL, thread1, (void *)NULL);/*创建进程t_a*/
pthread_create(&t_b, NULL, thread2, (void *)NULL); /*创建进程t_b*/
pthread_join(t_b, NULL);/*等待进程t_b结束*/
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(&cond);
getchar();
exit();
} void *thread1(void *junk)
{
for (i = ; i <= ; i++)
{
pthread_mutex_lock(&mutex);//
if (i % == )
pthread_cond_signal(&cond);/*条件改变,发送信号,通知t_b进程*/
else
printf("thead1:%d\n", i);
pthread_mutex_unlock(&mutex);//*解锁互斥量*/
printf("Up Unlock Mutex\n");
sleep();
}
return NULL; } void *thread2(void *junk)
{
while (i<)
{
pthread_mutex_lock(&mutex); if (i % != )
pthread_cond_wait(&cond, &mutex);/*等待*/
printf("thread2:%d\n", i);
pthread_mutex_unlock(&mutex);
printf("Down Ulock Mutex\n"); sleep();
}
return NULL;
}
pthread 笔记的更多相关文章
- Pthread 用法笔记
什么是线程? 从技术上讲,一个线程被定义为一个独立的指令流. 一个进程可以包含一个或多个线程. 线程操作包括线程创建,终止,同步(连接,阻塞),调度,数据管理和进程交互. 进程内的所有线程共享: 相同 ...
- PThread 学习笔记
POSIX 线程,也被称为Pthreads,是一个线程的POSIX标准: pthread.h int pthread_create(pthread_t * thread, pthread_attr_t ...
- storysnail的Linux串口编程笔记
storysnail的Linux串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据Ge ...
- Mongodb Manual阅读笔记:CH4 管理
4 管理 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...
- What every programmer should know about memory 笔记
What every programmer should know about memory, Part 1(笔记) 每个程序员都应该了解的内存知识[第一部分] 2.商用硬件现状 现在硬件的 ...
- contiki-main.c 中的process系列函数学习笔记 <contiki学习笔记之六>
说明:本文依然依赖于 contiki/platform/native/contiki-main.c 文件. ---------------------------------------------- ...
- linux网络编程学习笔记之五 -----并发机制与线程�
进程线程分配方式 简述下常见的进程和线程分配方式:(好吧,我仅仅是举几个样例作为笔记...并发的水太深了,不敢妄谈...) 1.进程线程预分配 简言之,当I/O开销大于计算开销且并发量较大时,为了节省 ...
- Boost使用笔记(Smart_ptr)
我是Word写的,复制过来实在懒得在排版了,有兴趣的朋友可以去我的百度文库看,谢谢 http://wenku.baidu.com/view/34e485e2f61fb7360b4c653e.html ...
- 笔记整理--Linux多线程
Unix高级环境编程系列笔记 (2013/11/17 14:26:38) Unix高级环境编程系列笔记 出处信息 通过这篇文字,您将能够解答如下问题: 如何来标识一个线程? 如何创建一个新线程? 如何 ...
随机推荐
- 2.jdk1.8+springboot中http1.1之tcp连接复用实现
接上篇:https://www.cnblogs.com/Hleaves/p/11284316.html 环境:jdk1.8 + springboot 2.1.1.RELEASE + feign-hys ...
- WordPress窗体化侧边栏
窗体化侧边栏是一个支持 Widget 的侧边栏或者说是窗体化(widgetized)的侧边栏几乎是 WordPress 主题的标准. 首先,什么是窗体化(widgetizing)呢?简单的说,窗体化就 ...
- leetcode94 不同的二叉搜索树
solution 1:**动态规划 class Solution { public: int numTrees(int n) { vector<int> g={1,1,2}; for(in ...
- 有关react-native的最常用的库(文件、样式、UI组件)
一.对文件的处理 1.react-native-fs 2.react-native-file-selector 3.MaterialFilePicker 二.React-Native 样式指南 1.r ...
- 安装k8s-1master多node节点
卸载比较新的18.3版本,安装17.03版本 删除旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker- ...
- JavaScript(7)——DOM
什么是 DOM? DOM是 Document Object Model(文档对象模型)的缩写 DOM是 W3C(万维网联盟)的标准. DOM 定义了访问 HTML 和 XML 文档的标准: “W3C ...
- HashPump用法
做哈希长度扩展攻击的时候用到这个工具,但是没找到这个工具详解办法 我这篇不算是详解,只是收集例子做出的一个用法 HashPump一种在各种散列算法中利用散列长度扩展攻击的工具.目前支持的算法:MD5, ...
- 【AMAD】django-social-auth -- 让django使用社交网络oauth鉴权变得极为轻松!
简介 个人评分 简介 django-social-auth1集成的Oauth API包括: Google OpenID Google Oauth Google Oauth2 Yahoo OpenID ...
- 【VS开发】使用CTabView分割多页卡窗口
一般书中介绍的是使用CSplitterWnd来拆分窗口实现多视图,CSplitterWnd中的CreateClient可以保存其创建的pCreateContext指针,以便子视图共享Document. ...
- js-object引用示例
function displayInfo(args){ var output=""; if(typeof args.name == "string"){ out ...