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. HTTP状态码及其含义 503 500 401 200 301 302

    下表显示了常见的HTTP 1.1状态代码以及它们对应的状态信息和含义. 应当谨慎地使用那些只有HTTP 1.1支持的状态代码,因为许多浏览器还只能够支持HTTP 1.0.如果你使用了HTTP 1.1特 ...

  2. 北京Uber优步司机奖励政策(2月6日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  3. ASP.NET MVC- Model- An Introduction to Entity Framework for Absolute Beginners

    Introduction This article introduces Entity Framework to absolute beginners. The article is meant fo ...

  4. java带图片的邮件发送方法实现

    package sendEmail; import java.util.Properties; import javax.activation.DataHandler; import javax.ac ...

  5. 扯谈网络编程之Tcp SYN flood洪水攻击

    简单介绍 TCP协议要经过三次握手才干建立连接: (from wiki) 于是出现了对于握手过程进行的攻击.攻击者发送大量的SYN包,server回应(SYN+ACK)包,可是攻击者不回应ACK包,这 ...

  6. [Webpack 2] Use Karma for Unit Testing with Webpack

    When writing tests run by Karma for an application that’s bundled with webpack, it’s easiest to inte ...

  7. 系统调用表 linux 2.6.32

    [root@localhost log]# find / |grep syscall_table /usr/src/kernels/linux-/arch/x86/kernel/syscall_tab ...

  8. System Address Map Initialization in x86/x64 Architecture Part 2: PCI Express-Based Systems

      原文  http://resources.infosecinstitute.com/system-address-map-initialization-x86x64-architecture-pa ...

  9. CSharp Algorithm - How to traverse binary tree by breadth (Part II)

    /* Author: Jiangong SUN */ Here I will introduce the breadth first traversal of binary tree. The pri ...

  10. Linux--------------安装vsftpd

    1.安装vsftpd        yum install -y vsftpd         yum -y install ftp vsftpd    2.安装vsftpd虚拟用户配置依赖包     ...