线程

来源:互联网 发布:淘宝网抓绒布料 编辑:程序博客网 时间:2024/06/05 04:28
线程的实现
用户线程
内核线程
多对多的线程(内核级)
(多对1)用户级
更好的利用计算机的资源(早期用进程进行模拟线程)
需要进程同时处理几件事情。
四个处理器共享io共享主存储器
并发是一秒内几个程序都分开进行
并行 一秒内几个程序都进行了1秒






创建线程
pthread int pthread_create(pthread_t *thread,pthread_attr_t,void *(*start_routine)(void *) void *arg)例子#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <assert.h>#include <string.h>#include <pthread.h>int i=0;void * fun(void *arg){int i=0;for(;i<3;i++){printf("nihao\n");sleep(1);}}int main(){pthread_t id;pthread_create(&id,NULL,fun,NULL);for(;i<5;i++){printf("helloworld\n");sleep(1);}}


主函数结束调用exit(退出进程)结束所有的线程
pthread_exit(NULL)退出线程操作
等待线程
让主函数接受
线程中的东西
char *s=NULL;
pthread——join(id,(void**)&s) 让主函数等待
传入多个参数类型相同用数组类型不同用结构体(数组就是特殊的结构体类型)运行的时候到链接库-Lphread
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <assert.h>#include <string.h>#include <pthread.h>typedef struct _data{int a;char B;}data;int i=0;void * fun(void *arg){int i=0;data *p=(data *)arg;for(;i<5;i++){printf("nihao%d,%c\n",p->a,p->B);sleep(1);}}int main(){pthread_t id;int i=0;int a=0;data A;A.a=0;A.B='S';pthread_create(&id,NULL,fun,(void*)&A);for(;i<3;i++){printf("helloworld%d\n",a++);sleep(1);}char *s=NULL;pthread_join(id ,(void **)&s);printf("main s=%s",s);}



创建多个线程

#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <assert.h>#include <pthread.h>#define max 5void *fun(void *arg){int *p=(int*)arg;int i=0;for(;i<max;i++){printf("fun()%d\n",*p);sleep(1);}}int main(){pthread_t id[max];int i=0;for(;i<5;i++){pthread_create(&id[i],NULL,fun,(void*)&i);sleep(1);}sleep(3);for(i=0;i<max;i++){pthread_join(id[i],NULL);}printf("main over\n");}













线程同步
信号量
同步
#include 《》sem_t sem;void *fun(void *arg){int i=0;for(;i<5;i++){sem_wait(&sem);printf("b");fflus(stdout);int n=rand()%3sleep(n)printf(b)fflush(stdout)sem_post(&sem)fflush(3);}}int main(){pthread_t id;sem_init(&sem,0,1);pthread_creat(&id,NULL,fun,NULL);for(;i<5;i++){sem_wait(&sem);printf("b");fflus(stdout);int n=rand()%3sleep(n)printf(b)fflush(stdout)sem_post(&sem)sleep(3);}sem_destory(&sem);}


原创粉丝点击