linuxC多线程:帮我记住

原创 2012年03月27日 17:07:51

多线程:

* 头文件 <pthread.h> , 链接库  -lpthread  , pthread_t 类型   pthread_attr_t 属性类型

* 3个常用函数:

    int pthread_create(标识符,属性NULL,函数void* (*fun)(void*) , (void* ) 参数指针);  // 创建一个线程

    void pthread_exit(void* retval); 这个返回的东东可以被pthread_join()第二个参数接收啊;  //线程退出,并且返回一个任意类型的东东的指针哦。

    int pthread_join( pthread_t th, void ** thread_return ) ;    //等待那个线程结束

 

注意:我们常用sleep来达到代码演示效果,也可以用while( i < 30 ) 来达到演示效果。

插入代码:420页

-------------------------------------------------------------------------

线程同步:信号量(有限制个数的访问的控制)、互斥量(单个访问的控制)

一。信号量:二进制信号量,计数信号量

 *以sem_ 开头,4个基本函数    ,   * <semaphore.h>  sem_t  

* int seminit(sem_t &sem, int pshared , unsigned int value);   第二个参数:共享状态,设置为0表示局部,非0表示进程间共享, 第三个参数:初始化信号量的值:比如0

*int sem_wait( sem_t * sem ) ;  //以原子方式 -1

*int sem_post( sem_t * sem);     //   sem_trywait(sem_t * sem);   以原子方式 +1

*int sem_destroy(sem_t * sem) ; //企图清理一个正在被线程等待的信号量,会收到一个错误。

****信号量变量应该做为全局变量哦。记得哦,因为他要用在多个线程函数中,所以必须全局变量。

*****技巧在于: 信号量为0 的时候,调用wait() 会等待哦   + while()的配合 + sleep() 的配合。

插入代码:424页

-------------------------------------------------------------------------

二。互斥量:  在临界区前加锁,后 解锁。  对一个加锁了的互斥量再加锁,会等待其解锁哦。(即阻塞)

* 与信号量的函数相似哦。    <pthread.h>   也有4个基本函数:   pthread_mutex_t  , 注意:和线程使用的是同一个头文件。

*int pthread_mutex_init ( pthread_mutex_t &mutex, const pthread_mutexattr_t *xxx) ; 属性先设置为NULL也可以的撒。

*int pthread_mutex_lock ( pthread_mutex_t *mutex);

*int pthread_mutex_unlock( pthread_mutex_t *mutex);

*int pthread_mutex_destroy( pthread_mutex_t * mutex);

插入代码:429页(linux 程序设计第4版)

---------------------------------------------------

线程属性:各种状态,设置各种调度方式。

线程取消:int pthread_cencel()  , 线程也可以设置自己的 取消状态,来防止或者响应别的线程发送过来的取消消息。

多线程:要防止太快,有必要时以局部接收一份copy,这样可以防止太快被改变了。

 

 

 

 

 

 

linuxC套接字socket:帮我记住

*套接字是一种通信机制,可以编写客户/服务端夸网络的通信程序。 *如何通过套接字来维持一个连接的?  1. 服务端调用socket()创建一个套接字,套接字是类似于文件描述符的资源。  2.服务...
  • cwj649956781
  • cwj649956781
  • 2012年03月28日 22:54
  • 1354

永远记住那些在困难的时候真诚帮助过我的人

永远记住那些在困难的时候真诚帮助过我的人
  • jintianhen1
  • jintianhen1
  • 2013年10月29日 20:53
  • 7999

linuxc多线程参数传递

#include #include struct stu   {       int age;     char *name;     char *num; };   vo...
  • jiangheng0535
  • jiangheng0535
  • 2014年08月08日 10:47
  • 582

LinuxC多线程详解

线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中只允许...
  • qq_28090573
  • qq_28090573
  • 2017年09月08日 11:40
  • 113

LinuxC多线程求和

我们要实现的是,使用多线程来计算 1 ~ n 范围的所有整数和。计算运行时间  因为要将普通求和程序与多线程作比较,所以先介绍一下如何计算程序运行的时间。获取时间函数:#includeint gett...
  • lyh__521
  • lyh__521
  • 2015年12月03日 23:37
  • 997

蛙蛙推荐:蛙蛙牌asp上传组件,(有完整注释)

蛙蛙推荐:蛙蛙牌asp上传组件,(有完整注释)当表单里既有文本域又有文件域的时候,我们必须把表单的编码类型设置成"multipart/form-data"类型这时候上传上来的编码文件并不能直接取出文本...
  • onlytiancai
  • onlytiancai
  • 2005年04月19日 10:51
  • 1568

使用MD5加密方式对登录密码加密(小demo)

使用MD5加密方式对登录密码加密(小demo)一般项目当中都会对登录或注册的密码进行加密处理,为了保证用户信息的安全。加密方式有很多种,在这里我就写写MD5的示例吧!MD5加密类public clas...
  • TROY_Musou
  • TROY_Musou
  • 2017年05月17日 11:21
  • 217

请大家伸出援助之手帮帮我亲哥一家吧,谢谢大家。祝福大家,祝大家平安幸福!!!

请救救这个有孝心而又不幸的家庭  http://www.qschou.com/project/95940bee-9a26-4df4-8111-833ad314eb56  请大家伸出援助之手帮帮我亲哥一...
  • wmj2003
  • wmj2003
  • 2016年06月15日 14:49
  • 787

linux 多线程的实现的基本原理

1. linux 多线程的基本概念  linux 是多用户、多任务的并发执行;所谓的并发是通过多进程、多线程来实现的;  1). 其中多进程有3种方式: 单机多实例(机器复用,一台机器启动多个进程...
  • caoshuming_500
  • caoshuming_500
  • 2016年03月28日 11:10
  • 2875

【C语言】linux下简单的聊天室程序(TCP+多线程)

利用多线程实现linux下C语言的聊天室程序: 客户端代码: threadsend线程负责客户端消息的发送; threadrecv线程负责客户端接受服务器端的消息。 #include #...
  • chenglibin1988
  • chenglibin1988
  • 2013年04月17日 10:19
  • 11669
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linuxC多线程:帮我记住
举报原因:
原因补充:

(最多只允许输入30个字)