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多线程求和

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

linuxC套接字socket:帮我记住

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

LinuxC多线程编程第四篇:线程同步mutex

说明:我讲解这些,是站在各位对线程已经有了一定的认识,比如说理解什么是同步或异步之类的概率,如果要把这些讲清楚,实现篇幅太多,也没有这个精力。     废话不多说,我们切入正题。 注意:最下面有本...

LinuxC多线程编程第二篇:线程终止

终止线程可以有三种方法 1、线程回调函数return。这种方法对主线程不适合。 2、一个线程调用pthread_cancel将终止同一进程中的另一个线程(这个比较复杂,这里先不做介绍) 3、线程...

HTTP多线程下载

  • 2017年11月13日 09:29
  • 36.79MB
  • 下载

多线程示例

  • 2017年11月17日 09:22
  • 6KB
  • 下载

LinuxC高级编程——线程

LinuxC高级编程——线程 宗旨:技术的学习是有限的,分享的精神的无限的。 一、线程基础         main函数和信号处理函数是同一个进程地址空间中的多个控制流程,多线程也是如 此,...

C++多线程临界区

  • 2017年11月04日 19:37
  • 13.38MB
  • 下载

多线程设计模式——Pipeline(流水线)模式

Pipeline(流水线)模式
  • buyoufa
  • buyoufa
  • 2016年07月14日 19:34
  • 2520
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linuxC多线程:帮我记住
举报原因:
原因补充:

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