Linux多线程通信
Linux 多线程通信 一.进程与线程进程通信:资源分配的最小单位有独立的地址空间,十分耗内存。 线程通信:程序执行的最小单位无独立的地址空间(多任务操作模式,多线程共享地址空间,节省开销) 线程间有方便的通信机制(共享数据,有独立堆栈和局部变量) 二.多线程API1.pthread_create函数的作用:
Linux 多线程通信
一.进程与线程
进程通信:资源分配的最小单位
有独立的地址空间,十分耗内存。
线程通信:程序执行的最小单位
无独立的地址空间(多任务操作模式,多线程共享地址空间,节省开销)
线程间有方便的通信机制(共享数据,有独立堆栈和局部变量)
二.多线程API
1.pthread_create
函数的作用:创建一个线程
函数的原型:int pthread_create(pthread_t *thread,pthread_attr_t *attr, (void *)(*start_routine(void *),(void *)arg);
函数的参数:thread:线程的标识符
attr:线程的属性,一般设为NULL
start_routine:线程的执行函数
arg:传入到线程执行函数的参数
返回 值:成功:0,出错:-1
头文 件:#include <pthread.h>
2.pthread_exit
函数的作用:线程的退出
函数的原型:void pthread_exit(void * retval)
3.pthread_join
函数的作用:等待线程的退出
函数的原型:pthread_join(pthread_t th,void ** thread_return)
函数的参数:th:线程的标识符
thread_return:不为NULL时,存储线程结束时返回值
返回 值:成功:0 出错:<0
三. 多线程应用
1.thread_create.c
#include <stdio.h>
#include <pthread.h>
void *myThread1(void)
{
int i;
for (i=0; i<100; i++)
{
printf("This is the 1st pthread,created by zieckey.\n");
sleep(1);//Let this thread to sleep 1 second,and then continue to run
}
}
void *myThread2(void)
{
int i;
for (i=0; i<100; i++)
{
printf("This is the 2st pthread,created by zieckey.\n");
sleep(1);
}
}
int main()
{
int i=0, ret=0;
pthread_t id1,id2;
ret = pthread_create(&id1, NULL, (void*)myThread1, NULL);
if (ret)
{
printf("Create pthread error!\n");
return 1;
}
ret = pthread_create(&id2, NULL, (void*)myThread2, NULL);
if (ret)
{
printf("Create pthread error!\n");
return 1;
}
pthread_join(id1, 0);
pthread_join(id2, NULL);
return 0;
}
2.thread_struct.c
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
struct menber
{
int a;
char *s;
};
void *create(void *arg)
{
struct menber *temp;
temp=(struct menber *)arg;
printf("menber->a = %d \n",temp->a);
printf("menber->s = %s \n",temp->s);
return (void *)0;
}
int main(int argc,char *argv[])
{
pthread_t tidp;
int error;
struct menber *b;
b=(struct menber *)malloc( sizeof(struct menber) );
b->a = 4;
b->s = "zieckey";
error = pthread_create(&tidp, NULL, create, (void *)b);
if( error )
{
printf("phread is not created...\n");
return -1;
}
sleep(1);
printf("pthread is created...\n");
return 0;
}
四.线程之间对资源的竞争:
1.互斥锁Mutex
基本操作:
互斥锁初始化:pthread_mutex_init()
互斥锁上锁:pthread_mutex_lock()
互斥锁判断上锁:pthread_mutex_trylock()
互斥锁接锁:pthread_mutex_unlock()
消除互斥锁:pthread_mutex_destroy()
2.信号灯Semaphore
信号量初始化:sem_init
PV操作:
int sem_wait(sem_t*sem) --P操作
int sem_trywait(sem_t*sem)
int sem_post(sem_t*sem) --V操作
intsem_getvalue(sem_t *sem)
int sem_destroy(sem_t*sem)
3.条件变量Conditions
更多推荐
所有评论(0)