1,多线程下整个进程的退出

<<APUE>>关于进程环境一章中指出了进程退出的8个条件:

...

(4)最后一个线程从启动例程中返回

(5)最后一个线程调用pthread_exit()返回

...

这些条件一个前提是,主线程在等待子线程返回,若没有等待,则是主线程退出,整个进程直接退出了。其实主线程在等待子线程时,是阻塞到join()上了,最后也是主线程最后退出,整个进程也结束了。

主线程

 ...
{
pthread_create(...)
//打印 “In the main”
sleep();
}

子线程

 ...
{
//打印 “I am First”
sleep();
//打印 “I am Second”
}

这样子线程中的第二句话,永远也打印不出来;当去掉主线程中的sleep(1)后,子线程中的第一句话有时能打印出来,有时不能打印出来,第二句话永远也打印不出来,其实这里的sleep(1)起到了一个类似join()的作用。

多线程中切记一定要在主线程中join()子线程,也不要对sleep(...)产生任何信任,说不定子线程运行一半就退出了。

(2)多线程中的打印函数切记一定是没有输入缓冲的。

当我用cout,fprintf等函数往控制台上输出时,一开始还是正确的,当我不断运行同一个程序时,就会产生问题,有些语句输出了两次,如I am second连续打印了两次,有时候两句话输出到了同一行(就是endl没有起作用),我猜想因为这些函数是带有输入缓冲的。

改用了

 #include<unistd>
size_t write(int filedes, const void* buf, size_t bufsize);

函数后,就没有上面的问题了。

多线程中这种写日志的信息,我想应该用系统不带缓冲的I/O,而别去使用标准库I/O。

linux下多线程踩过的坑(不定更新)的更多相关文章

  1. [转载]解决linux 下多线程错误 undefined reference to `sem_init'

    转自:https://blog.csdn.net/yzycqu/article/details/7396498?utm_source=copy 解决linux 下多线程错误 undefined ref ...

  2. java 多线程踩过的坑

    多线程踩坑记录:1.多线程切记不可以同时操作同一个原子数据.解释:存在一个条数据库A数据,不可以在2个或2个以上的线程中同时操作A数据.会引发重复操作.2.多线程操作方法不要加synchronized ...

  3. Linux下多线程下载工具 - Axel

    Axel 是 Linux 下一个不错的HTTP/FTP高速下载工具.支持多线程下载.断点续传,且可以从多个地址或者从一个地址的多个连接来下载同一个文件.适合网速不给力时多线程下载提高下载速度.比如在国 ...

  4. Linux下多线程编程

    一.为什么要引入线程? 使用多线程的理由之一是和进程相比,它是一种非常"节俭"的多任务操作方式.在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维 ...

  5. Axel linux下多线程下载工具

    Axel 是 Linux 下一个不错的HTTP/FTP高速下载工具.支持多线程下载.断点续传,且可以从多个地址或者从一个地址的多个连接来下载同一个文件.适合网速不给力时多线程下载提高下载速度.比如在国 ...

  6. Linux下多线程下载工具myget

    [root@superdba ~]# mytgetMytget 0.0.99: A download accelerator for GNU/LinuxUsage: mytget [options]. ...

  7. linux下多线程断点下载工具-axel

    今天要下载一下14G左右的文件,用wget约10小时,后来发现linux下有个多线程支持断点续传的下载工具axel,试了一下,下载速度大大增加. 包地址:http://pkgs.repoforge.o ...

  8. Linux下多线程复制文件(C)

    Linux下实现多线程文件复制,使用<pthread.h>提供的函数: int pthread_create(pthread_t *thread,const pthread_attr_t ...

  9. linux下多线程互斥量实现生产者--消费者问题和哲学家就餐问题

    生产者消费者问题,又有界缓冲区问题.两个进程共享一个一个公共的固定大小的缓冲区.其中一个是生产者,将信息放入缓冲区,另一个是消费者,从缓冲区中取信息. 问题的关键在于缓冲区已满,而此时生产者还想往其中 ...

随机推荐

  1. 【solr基础教程之九】client

    一.Java Script 1.因为Solr本身能够返回Json格式的结果,而JavaScript对于处理Json数据具有天然的优势,因此使用JavaScript实现Solrclient是一个非常好的 ...

  2. linux+nginx+tomcat负载均衡,实现session同步

    linux+nginx+tomcat负载均衡,实现session同步 花了一个上午的时间研究nginx+tomcat的负载均衡测试,集群环境搭建比较顺利,但是session同步的问题折腾了几个小时才搞 ...

  3. 用mac自带的safari浏览器下载excel文件后面自带了.exe后缀

    将 Content-Type 设为 application/vnd.ms-excel

  4. Linux 汇编语言开发指南

    http://www.ibm.com/developerworks/cn/linux/l-assembly/

  5. C# #define

    https://msdn.microsoft.com/library/yt3yck0x.aspx 使用 #define 定义符号.当您将符号用作传递给 #if 指令的表达式时,此表达式的计算结果为 t ...

  6. 常用数据库的驱动类/URL/默认端口

    常用数据库的驱动类/URL/默认端口 1.Oracle:     格式:     驱动:oracle.jdbc.driver.OracleDriver     URL:jdbc:oracle:thin ...

  7. select组件

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  8. 玩转Android之在线视频播放控件Vitamio的使用

    其实Android中自带的MediaPlayer本身就能播放在线视频,MediaPlayer结合SurfaceView播放在线视频也是不错的选择(如果你没有性能或者用户体验上的要求),关于MediaP ...

  9. 关于ellipsize属性使用的一些细节

    ellipsize主要是处理当文字长度超过TextView可显示的长度的时候,系统的处理方式,ellipsize主要有以下几种值: android:ellipsize="start" ...

  10. 友元(friend)--初学篇

    友元:友好的元子,,,,呵呵呵 一般一个类中有私有(private),公有(public),和保护(protected)三种类型成员,而只有public成员才可以在类外被随便访问,protected只 ...