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 笔记的更多相关文章

  1. Pthread 用法笔记

    什么是线程? 从技术上讲,一个线程被定义为一个独立的指令流. 一个进程可以包含一个或多个线程. 线程操作包括线程创建,终止,同步(连接,阻塞),调度,数据管理和进程交互. 进程内的所有线程共享: 相同 ...

  2. PThread 学习笔记

    POSIX 线程,也被称为Pthreads,是一个线程的POSIX标准: pthread.h int pthread_create(pthread_t * thread, pthread_attr_t ...

  3. storysnail的Linux串口编程笔记

    storysnail的Linux串口编程笔记 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据Ge ...

  4. Mongodb Manual阅读笔记:CH4 管理

    4 管理 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...

  5. What every programmer should know about memory 笔记

    What every programmer should know about memory, Part 1(笔记) 每个程序员都应该了解的内存知识[第一部分] 2.商用硬件现状      现在硬件的 ...

  6. contiki-main.c 中的process系列函数学习笔记 <contiki学习笔记之六>

    说明:本文依然依赖于 contiki/platform/native/contiki-main.c 文件. ---------------------------------------------- ...

  7. linux网络编程学习笔记之五 -----并发机制与线程�

    进程线程分配方式 简述下常见的进程和线程分配方式:(好吧,我仅仅是举几个样例作为笔记...并发的水太深了,不敢妄谈...) 1.进程线程预分配 简言之,当I/O开销大于计算开销且并发量较大时,为了节省 ...

  8. Boost使用笔记(Smart_ptr)

    我是Word写的,复制过来实在懒得在排版了,有兴趣的朋友可以去我的百度文库看,谢谢 http://wenku.baidu.com/view/34e485e2f61fb7360b4c653e.html ...

  9. 笔记整理--Linux多线程

    Unix高级环境编程系列笔记 (2013/11/17 14:26:38) Unix高级环境编程系列笔记 出处信息 通过这篇文字,您将能够解答如下问题: 如何来标识一个线程? 如何创建一个新线程? 如何 ...

随机推荐

  1. leetcode1283 使结果不超过阈值的最小除数

    这道题第一思路是用二分查找 因为使用二分法:所以复杂度为O(n*logk), k介于 left=sum/threshold(向下取整) 和 right=num_max之间:而right<=10^ ...

  2. LC 980. Unique Paths III

    On a 2-dimensional grid, there are 4 types of squares: 1 represents the starting square.  There is e ...

  3. python3.6 列表推导式学习

    a=[i for i in range(1,10) if i%2==0]print(a)c=[(x,y) for x in range(5) if x%2==0 for y in range(5) i ...

  4. 批量执行(Linux命令,上传/下载文件)

    前言: 每个公司的网络环境大都划分 办公网络.线上网络,之所以划分的主要原因是为了保证线上操作安全: 对于外部用户而言也只能访问线上网络的特定开放端口,那么是什么控制了用户访问线上网络的呢? 防火墙过 ...

  5. VLAN和VXLAN的区别

    VLAN ·概况 VLAN (Virtual Local Area Network)意为虚拟局域网,是在交换机实现过程中涉及到的概念,由802.1Q标准所定义.由于交换机是工作在链路层的网络设备,连接 ...

  6. Python3的编译安装

    Linux环境自带了Python 2.x版本,但是如果要更新到3.x的版本,可以在Python的官方网站下载Python的源代码并通过源代码构建安装的方式进行安装,具体的步骤如下所示. 1. 安装依赖 ...

  7. java创建和解析json对象

    最近工作遇到了 json 解析的相关需求,整理下 JSONObject 相关操作. 文中使用的例子都是基于阿里巴巴的产品 FastJSON ,涉及到的包有: import com.alibaba.fa ...

  8. centos7安装kvm及kvm管理

    一.安装kvm 查看CPU是否支持虚拟化  grep -E 'svm|vmx' /proc/cpuinfo - vmx is for Intel processors - svm is for AMD ...

  9. 【Linux】部署NTP时间同步服务器

    1. 查看机器的Linux版本 查看集群内所有服务器的linux版本,确保相同,不要跨大版本. [root@bigdata111 ~]# cat /etc/redhat-release CentOS ...

  10. python基础知识(字典)

    创建字典 变量名 = {key:value,.....} zip()    转换为zip对象 空字典 变量名 = {} 变量名 = dict(key = value,....) 创建只有键的字典 fr ...