苏嵌学习之线程thread

线程是什么?

我的理解:线程就是拥有独立pc的函数!

 

TID(线程ID)

 

线程的一些函数(头文件#include <pthread.h>):

1.create:

函数原型   int  pthread_create(pthread_t *thread,  const pthread_attr_t  *attr,  void * (* routine)(void *),  void *arg)
函数参数   thread:创建的线程
           attr:指定线程的属性,NULL表示使用缺省属性(一般为NULL)
           routine:线程执行的函数(void *function(void *arg))

           arg: 传递给线程执行的函数的参数(子线程没参数就用NULL)
函数返回值 成功:0
           出错:-1

2.join(wait):

函数原型    int  pthread_join(pthread_t thread,  void **value_ptr)
函数参数    thread:要等待的线程
            value_ptr:指针*value_ptr指向线程返回的参数(感觉可以不写,只要接受到exit就好)

函数返回值  成功:0
            出错:-1

3.exit:

函数原型    int  pthread_exit(void *value_ptr)
函数参数    value_ptr:线程退出时返回的值
函数返回值  成功:0
            出错:-1

4.cancel:

函数原型    int  pthread_cancel(pthread_t thead)
函数参数    thread:要取消的线程
函数返回值  成功:0
            出错:-1

 

线程同步和互斥

先说下线程与线程的通信:因为多线程共享同一个进程的地址空间

所以,线程间很容易进行通信,通过全局变量实现数据共享和交换

但是同时,多个线程同时访问共享对象时,会没有次序,也就是会很乱,所以需要引入同步和互斥机制。

 

1.线程间同步-P/V操作(#include <semaphore.h>)

信号量(unsigned int)是一个受保护的变量,只能通过三种操作(三个函数)来访问
初始化               int sem_init(sem_t *sem,  int pshared(一般为0[线程],非0为进程),  unsigned int value(初值))
P操作(申请资源)     int sem_wait(sem_t *sem);  sem--;sem要大于0;
V操作(释放资源)     int sem_post(sem_t *sem);  sem++;

上面3个函数成功返回0,失败返回-1。

2.线程间互斥(#include <pthread.h>)

初始化 int  pthread_mutex_init(pthread_mutex_t  *mutex, pthread_mutexattr_t *attr(一般为NULL)) 

上锁   int  pthread_mutex_lock(pthread_mutex_t *mutex)  

解锁   int  pthread_mutex_unlock(pthread_mutex_t *mutex)  

上面3个函数成功返回0,失败返回-1。

例子不举了,这几个函数都很简单!而且不早了,要睡觉了~~~~~~~~~

 

 

你可能感兴趣的:(苏嵌学习之线程thread)