zoukankan      html  css  js  c++  java
  • 深入理解计算机系统(第三版)第十二章重要内容摘要

    12.1基于进程的并发编程

    12.1.1基于进程的并发服务器

    12.1.2进程的优劣

    12.2基于I/O多路复用的并发编程

     

     

     

    12.2.1基于I/O多路复用的并发事件驱动器

    12.2.2I/O多路复用技术的优劣

    优点

    1、

    2、

     

    3、  

    4、

     缺点

    1、

    2、

    12.3基于线程的并发编程

     

    12.3.1线程执行模型

    12.3.2Posix线程

    12.3.3创建线程

     

    12.3.4终止线程

    12.3.5回收已终止线程的资源

    12.3.6分离线程

    12.3.7初始化线程

    12.3.8基于线程的并发服务器

    12.4多线程程序的共享变量

    12.4.1线程内存模型 

    12.4.2将变量映射到内存

    12.4.3共享变量

    12.5用信号量同步线程

    // 
    /* WARING: This code is buggy */  
    #include "csapp.h"  
    

    void thread(void vargp); / thread routine prototype /

    / globle shared variable /
    volatile long cnt = 0; / counter /

    int main(int argc, char **argv)
    {
    long niters;
    pthread_t tid1, tid2;

    </span><span style="color: #008000;">/*</span><span style="color: #008000;"> check input argument </span><span style="color: #008000;">*/</span>  
    <span style="color: #0000ff;">if</span> (argc != <span style="color: #800080;">2</span><span style="color: #000000;">) {  
        printf(</span><span style="color: #800000;">"</span><span style="color: #800000;">usage: %s &lt;niters&gt;
    </span><span style="color: #800000;">"</span>, argv[<span style="color: #800080;">0</span><span style="color: #000000;">]);  
        exit(</span><span style="color: #800080;">0</span><span style="color: #000000;">);  
    }  
    niters </span>= atoi(argv[<span style="color: #800080;">1</span><span style="color: #000000;">]);  
      
    </span><span style="color: #008000;">/*</span><span style="color: #008000;"> create threads and wait for them to finish </span><span style="color: #008000;">*/</span><span style="color: #000000;">  
    pthread_create(</span>&amp;tid1, NULL, thread, &amp;<span style="color: #000000;">niters);  
    pthread_create(</span>&amp;tid2, NULL, thread, &amp;<span style="color: #000000;">niters);  
    pthread_join(tid1, NULL);  
    pthread_join(tid2, NULL);  
      
    </span><span style="color: #008000;">/*</span><span style="color: #008000;"> check result </span><span style="color: #008000;">*/</span>  
    <span style="color: #0000ff;">if</span> (cnt != (<span style="color: #800080;">2</span> *<span style="color: #000000;"> niters))  
        printf(</span><span style="color: #800000;">"</span><span style="color: #800000;">BOOM! cnt = %1d
    </span><span style="color: #800000;">"</span><span style="color: #000000;">, cnt);  
    </span><span style="color: #0000ff;">else</span><span style="color: #000000;">  
        printf(</span><span style="color: #800000;">"</span><span style="color: #800000;">OK cnt = %1d
    </span><span style="color: #800000;">"</span><span style="color: #000000;">, cnt);  
    exit(</span><span style="color: #800080;">0</span><span style="color: #000000;">);  
    

    }

    / thread routine /
    void *thread(void *vargp)
    {
    long i, niters = *((long *)vargp);

    </span><span style="color: #0000ff;">for</span> (i = <span style="color: #800080;">0</span>; i &lt; niters; i++<span style="color: #000000;">)  
        cnt</span>++<span style="color: #000000;">;  
          
    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> NULL;  
    

    }
    //

    12.5.1进度图

    12.5.2信号量

     

    12.5.3使用信号量实现互斥

    12.5.4利用信号量来调度共享资源

    1.生产者-消费者问题

    2.读者-写者问题

    12.5.5综合:基于预线程化的并发服务器

    12.6使用线程提高并行性

    刻画并行程序的性能

     

    12.7其他并行问题

    12.7.2可重入性

    12.7.3在线程化的程序中使用已存在的库函数

    12.7.4竞争

    12.7.5死锁

  • 相关阅读:
    BZOJ 1004: [HNOI2008]Cards [Polya 生成函数DP]
    BZOJ 1119: [POI2009]SLO [置换群]
    POJ 2154 Color [Polya 数论]
    POJ 2409 Let it Bead [置换群 Polya]
    POJ置换群入门[3/3]
    [置换群&Polya计数]【学习笔记】
    查看linux中的TCP连接数
    SIT测试 和 UAT测试
    原生app是什么意思?
    线程池原理
  • 原文地址:https://www.cnblogs.com/GodZhuan/p/14298783.html
Copyright © 2011-2022 走看看