zoukankan      html  css  js  c++  java
  • linux多线程编程基本操作(2)

    linux c多线程总结:
    1:关于线程和进程
        a:使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式。我们知道,在Linux系统下,启动一个新的进程必须分配给
    它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。而运行于一个进程中的多个
    线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间
    彼此切换所需的时间也远远小于进程间切换所需要的时间。
        b:使用多线程的理由之二是线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,
        这种方式不仅费时,而且很不方便。线程则不然,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,
        这不仅快捷,而且方便。当然,数据的共享也带来其他一些问题,有的变量不能同时被两个线程所修改,有的子程序中声明为static的数据
        更有可能给多线程程序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地方。
    2:线程的基本操作步骤:
        a:声明线程标识符变量
            pthread_t xx;
        b:写线程操作函数
            void threadfunction(){...}
        c:如果需要对某些变量和操作加锁,那么先声明一个线程锁标识符变量,并且初始化
            pthread_mutex_t mut;
            pthread_mutex_init(&mut,NULL);
            //子线程中
            pthread_mutex_lock(&mut);
            ...//在需要加锁的地方前后加上
            pthread_mutex_unlock(&mut);
        d:创建运行线程
            pthread_create(1,2,3,4);//1:线程标识符方便以后对该线程的操作,因为一个线程函数可以被创建为多个线程,2:线程属性,3:线程函数,4:函数参数
        e:结束线程
            主线程中:(阻塞函数)pthread_join(1,2)//1:xc标识符,2:存储函数返回值的指针
            子线程中:pthread_exit(1)//1:存储返回值
    3:关于线程属性:
        属性结构为pthread_attr_t,它同样在头文件/usr/include/pthread.h中定义。属性值不能直接设置,
        须使用相关函数进行操作,初始化的函数为pthread_attr_init,这个函数必须在pthread_create函数
        之前调用。属性对象主要包括是否绑定、是否分离、堆栈地址、堆栈大小、优先级。默认的属性为非
        绑定、非分离、缺省1M的堆栈、与父进程同样级别的优先级。
        除了可以在pthread_create中第二个参数那里设置属性以外,还可以通过函数pthread_attr_setscope()设置绑定状态,
        使用pthread_detach()设置分离状态,使用pthread_attr_setschedparam()设置优先级
  • 相关阅读:
    Xcode修改新建项目注释模板(作者和公司名等)
    Xcode全局替换内容,一键Replace
    The type javax.ws.rs.core.MediaType cannot be resolved. It is indirectly referenced from required .class files
    IT公司的女流之辈
    论公司的核心竞争力
    人性
    如何使用yum 下载 一个 package ?如何使用 yum install package 但是保留 rpm 格式的 package ? 或者又 如何通过yum 中已经安装的package 导出它,即yum导出rpm?
    The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files.
    maven repo plugin archiver
    Error connecting to database [Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)]
  • 原文地址:https://www.cnblogs.com/zzy-frisrtblog/p/5779012.html
Copyright © 2011-2022 走看看