zoukankan      html  css  js  c++  java
  • pthread

    设置进程绑定状态的函数pthread_attr_setscope
    pthread_attr_t 指向属性结构的指针
    第二个参数 绑定类型 pthread_scope_system()
    pthread_scope_process(非绑定)
    创建一个绑定线程

    线程属性结构
    pthread_attr_t

    #include <pthread.h>
    pthread_attr_t attr;
    pthread_t tid;//线程标识符id

    //初始化属性值,均设为默认值
    //代码创建绑定线程

    //初始化线程属性,均设为默认值
    pthread_attr_init(&attr);
    pthread_attr_setscope(&attr,PTHREAD_SCOPE_SYSTEM);设置线程绑定状态函数
    pthread_scope_system(绑定)
    pthread_scope_process(非绑定的)

    pthread_create(&tid,&attr,(void *)my_function,NULL);

    线程是否绑定 决定影响线程的响应速度

    线程分离状态 决定一个线程以什么样的方式终止
    线程分离状态决定线程什么方式终止自己
    线程的默认属性 非分离状态
    非分离状态下,原有的线程等待创建的线程结束
    pthread_join等待线程结束
    原有的线程等待创建的线程结束,只有当pthread_join()函数返回 创建的
    线程才算结束 才能释放自己占用系统资源

    分离线程不是這个样子 没有被其它的线程所等待 分离线程 没有被其它线程等待
    自己运行结束了 ,线程 就终止 了

    马上释放系统资源
    设置线程分离状态函数pthread_attr_setdetachstate(pthread_attr_t *attr,int detachstate);

    第二个参数为pthread_attr_setdetachstate()
    pthread_create_detached
    pthread_create_joinable
    如果设置一个线程为分离线程 而线程运行又非常快
    很可能此线程在pthread_create函数返回之前就终止了
    终止以后就有可能将线程号和系统资源移交给其它的线程使用
    這样调用pthread_create的线程就得到了错误的线程号

    避免这种情况采取一定的同步措施
    在被创建的线程里面调用pthread_cond_timewait
    让线程等待一会
    留出足够的时间让函数pthread_create返回
    设置一段等待时间,是在多线程编程里面常用的方法
    不能使用wait() wait使整个进程睡眠,并不能解决线程同步问题

    属性 线程优先级priority 存在于结构 sched_param
    pthread_attr_getschedparam
    pthread_attr_setschedparam
    一般来说我们总是先取优先级,对取得值进行修改后再存放回去


    线程的属性优先级sched_param
    sched.h sched_param
    pthread_attr_getschedparam
    pthread_attr_setschedparam


    sched_param sched.h

    #include <pthread.h>
    #include <sched.h>

    pthread_attr_t attr;
    pthread_t tid;
    sched_param param;
    int newprio = 20;

    pthread_attr_init(&attr);//
    pthread_attr_getschedparam(&attr,&param);
    param.sched_priority = newprio;
    pthread_attr_setschedparam(&attr,&param);
    pthrea_create(&tid,&attr,(void *)myfunction,myarg);

    线程的数据处理
    和进程相比 线程的最大优点之一 数据共享性

    各个线程共享进程处沿袭的数据段,可以方便的获取,修改数据
    线程的数据共享性在带来方便性的同事 也给多线程编程带来了问题
    我们必须当心有多个不同的进程访问相同的变量

    线程数据处理

    线程的数据处理

    线程

    函数中
    线程中共享的变量必须用关键字volatile定义 防止编译器在 gcc -OX

    防止编译器在优化时改变了使用方式

    为了保护变量 我们必须使用信号量 signal metux 保证对变量正确使用
    线程数据
    单线程程序 两种基本数据
    global variable local variable;
    多线程程序中 第三种数据类型
    tsd thread-specific data
    和全局变量象
    线程内部 各个函数可以像使用全局变量一样调用
    线程数据
    为每个线程创建一个建 线程和建相关联
    在各个线程路面 都使用這个建来指代线程数据 在不同的线程里
    和线程数据相关的函数
    创建建 为一个键指定线程数据
    从一个键读取线程数据 删除键
    volatile 保护变量 使用信号量 互斥 保证我们对变量的正确使用
    线程数据
    单线程程序里面 两种基本的数据 全局 变量 局部变量
    多线程 有三种 数据类型
    线程数据thread_specific da ta

    线程数据和全局变量很像
    线程内部 各个函数可以像使用全局变量一样调用 对线程外部的其他线程 不可见 数据的必要性
    errno


    errno 线程变量
    线程数据
    线程数据创建建 线程和建相关联在各个线程里都使用键指代线程数据
    在不同的线程 键指代的数据不同 在同一个线程里 代表同样的数据
    线程数据只在线程内部;

    实现线程数据变量 ,需要为每个线程创建键 线程再和建关联
    各个线程里都使用键代指线程数据

  • 相关阅读:
    二分使用条件 + 代码模板
    Codeforces Round #710 (Div. 3) Editorial 1506A
    Cf #709 Div. 2 B. Restore Modulo 一个只有三千多人过的b题, 妙啊!
    牛客网 第十八届浙大城市学院程序设计竞赛(同步赛)J--万万没想到 啦啦啦啦啦
    Codeforces Round #707 (Div. 2)A.英语漏洞 + C.Going Home C题收获不小
    Codeforces Round #706 (Div. 2)B. Max and Mex __ 思维, 模拟
    Codeforces Round #705 (Div. 2) B. Planet Lapituletti(镜像时钟) 思维
    位运算
    Edu Cf Round 105 (Div. 2) B. Berland Crossword 1.读懂题, 2. 思维
    Codeforces Round #703 (Div. 2)__ B. Eastern Exhibition__ 纯纯的思维
  • 原文地址:https://www.cnblogs.com/ruiy/p/7493732.html
Copyright © 2011-2022 走看看