• 第41天-线程 _1(2013.09.14)


      1.一个进程可以包含多个线程,线程是进程的子集

      2.同一进程的多个线程共享同一个地址空间

          共享资源 : 

              文件描述符表

              每种信号的处理方式(SIG_IGN, SIG_DFL, 或者自定义的信号处理函数)

              当前工作目录  

              用户id和组id

          不共享资源 :

              线程id

              上下文, 包括寄存器的值, 程序计数器和栈指针

              栈空间

              errno变量

              信号屏蔽字

              调度优先级

      3.在Linux上线程函数位于libpthread共享库中,在编译时需要加上 -lpthread选项

      4.pthread_create

          函数原型 : #include <pthread.h>

                int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void *), void *restrict arg);

          调用 : pthread_self   可以获得当前线程的id

          如果任意一个线程调用了exit 或_exit, 则整个进程的所有线程都终止

      5.终止线程的方法 : 

            从线程函数 return , 这种方法对主线程不适用, 从main函数return相当于调用exit

            一个线程一个调用pthread_cancel终止同一个进程中的另一个线程

            线程可以调用pthread_exit终止自己

      6.函数原型 : #include <pthread.h>

            void pthread_exit(void *value_ptr);

          注意 ; pthread_exit或者return 返回的指针所指向的内存单元必须是全局的,或者是malloc分配的

            #include <pthread.h>

            int pthread_join(pthread_t thread, void **value_ptr);

                如果thread线程通过return返回, value_ptr所指向的单元里存放的是thread线程函数的返回值

                如果thread线程被别的进程调用pthread_cancel异常终止掉, value_ptr所指向的单元里存放的是常数PTHREAD_CANCELED

                如果thread线程是自己调用pthread_exit终止的, value_ptr所指向的单元存放的是传给pthread_exit的参数

      7。函数原型 : #include <pthread.h>

              int pthread_detach (pthread_t tid);

          不能对一个已经处于detach状态的线程调用pthread_join,这样的调用将返回EINVAL, 对一个尚未detach的线程调用pthread_join或pthread_detach都可以把该线程设置为detach转台

  • 相关阅读:
    【散列表】拉链法以及线性探查法
    【Spring】第一个hello world程序
    『Java基础』基本数据类型和包装类
    二进制、八进制、十进制、十六进制互转
    [MyBatis]缓存机制
    Ora-01830 日期格式图片在转换整个输入字符串之前结束
    leetcode1584. 连接所有点的最小费用(最小生成树算法的应用)
    VS安装SVN插件
    Winform打开不窗体设计器解决方法(Winform以普通C#类显示,打开不了设计器)
    Oracle修改System密码并解锁
  • 原文地址:https://www.cnblogs.com/cxw825873709/p/3324762.html
Copyright © 2020-2023  润新知