线程
来源:互联网 发布:淘宝网抓绒布料 编辑:程序博客网 时间:2024/06/05 04:28
线程的实现
用户线程
内核线程
多对多的线程(内核级)
(多对1)用户级
更好的利用计算机的资源(早期用进程进行模拟线程)
需要进程同时处理几件事情。
四个处理器共享io共享主存储器
并发是一秒内几个程序都分开进行
并行 一秒内几个程序都进行了1秒
创建线程
主函数结束调用exit(退出进程)结束所有的线程
pthread_exit(NULL)退出线程操作
等待线程
让主函数接受
线程中的东西
char *s=NULL;
pthread——join(id,(void**)&s) 让主函数等待
传入多个参数类型相同用数组类型不同用结构体(数组就是特殊的结构体类型)运行的时候到链接库-Lphread
创建多个线程
线程同步
信号量
同步
用户线程
内核线程
多对多的线程(内核级)
(多对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);}
阅读全文
0 0
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 线程
- 数据结构C语言版--单链表的基本功能实现
- UVa1368 DNA Consensus string AC
- OkHttp3 Interceptor 拦截器的使用 统一追加参数
- 神经网络和CNN的一些基础概念,基础知识的梳理
- Java OOP之多态
- 线程
- Q-Prime Ring Problem
- 判断一个div是否在屏幕外
- How To Use Google Logging Library (glog)
- HTML基础知识
- Settimeout 设置以后,可以用cleartimeout清除。
- 网易2016招聘<路灯>Java代码
- node.js部署之启动后台运行 forever
- 超大数据量排序