
s2: 进程线程
涛歌依旧
毕业后就职于华为和腾讯
展开
-
一个低概率bug的定位过程---多线程操作文件时一定要注意
某测试MM反馈了一个与文件有关的低概率问题, 我和我带的那个同事(以下简称我们)都没有重现到这个问题。 但是, 某人(我不认识, 也没有见过面)在电话会议中说这个问题多么多么严重, 还把我们骂了一顿, 语言相当龌蹉, 而且非常生硬, 装得很像个啥领导似的。 虽然涛哥我为人随和善良, 工作积极尽责, 但遇到这种满嘴脏话的人, 涛哥也不是好惹的, 结果, 你懂的。 然后对方直接问: 你谁啊?原创 2015-01-29 00:07:11 · 9454 阅读 · 1 评论 -
父线程退出后, 子线程会退出么?(我在Windows和Linux上都验证过)
我们来看一个常见的基本问题:父线程退出后, 子线程会退出么? 我不喜欢人云亦云, 一贯主张大胆假设, 小心求证,貌似有点实证主义色彩了, 不多说, 直接看程序:#include #include DWORD WINAPI ThreadFun(LPVOID pM){ while(1) { printf("子线程的线程ID号为:%d\n", GetCurrentT原创 2015-01-29 22:27:24 · 18111 阅读 · 11 评论 -
Windows下利用C语言程序设置环境变量---能否用环境变量实现进程间的通信?
先看什么是环境变量吧, 在Windows的cmd中, 我们输入一下set命令, 得到:C:\Documents and Settings\Administrator>setALLUSERSPROFILE=C:\Documents and Settings\All UsersAPPDATA=C:\Documents and Settings\Administrator\Applicati原创 2015-03-27 23:57:47 · 12153 阅读 · 2 评论 -
“进程球”通过数据库来通信------好美的一幅图!
拿着一支笔, 随便画画, 然后在纸上画了三个球, 哦, 这不就是一个个的进程么? 本来想上传亲笔画的图, 但晚上拍照效果不太好, 所以还是用鼠标来画吧。 先睹为快: 图还是挺好看的 下面, 我们来闲聊一下这幅图的一些东东。 什么是进程呢? 笔试面试总会被问到这个讨厌的问题, 要我说,原创 2015-05-16 01:06:02 · 8296 阅读 · 4 评论 -
父线程用标志变量控制子线程的范例
在实际开发中, 我们会碰到太多需要开线程的例子, 通常会让子线程异步地处理一些信息。 一旦某些情况发生后, 我们需要在父线程中让子线程终止, 那则么办呢? 一个自然而言的想法是用标志变量控制 通用范例如下:#include #include #define YES 0#define NO -1int exitFlag = NO;void *threadFun(v原创 2015-05-28 23:35:14 · 8161 阅读 · 2 评论 -
如何让你的linux程序在后台静默执行?
最近写了个工具, 需要在后台静默执行, 即使关闭了当前linux命令行窗口, 也不会有影响, 我们来戏说。 1. 写main.cpp, 生成可执行的二进制文件main (要注意权限, 确保可执行) 2. 写脚本run.sh (要注意权限, 确保可执行)原创 2016-12-24 08:54:59 · 21161 阅读 · 1 评论 -
孤儿进程示例分析
父进程创建子进程后, 父进程先挂了, 于是子进程成了孤儿进程, 被新的init进程所领养。 来看代码:#include #include int main(){ int pid = 0; pid = fork(); if(pid < 0) { printf("error1\n"); return 1; } if (0 == pi原创 2017-06-27 07:55:37 · 7483 阅读 · 3 评论 -
线程其实很简单
当年在某公司实习的时候, 涉及到多线程的概念(实际上就是主线程和网络线程), 小师傅问我, 懂不懂线程的概念, 我说不懂, 也确实不懂。 后来要找工作了, 再不懂就不好了, 所以跟大家一起看书, 书上说: 进程是正在运行的程序, 一个进程可以多多少线程。 擦, 无用的废话。 反正我一直没有理解线程是真么, 也没有搞清楚什么是线程, 只是看书上说, 线程可以提高程序效率。 呜呼哀哉。原创 2017-07-30 15:01:59 · 8004 阅读 · 11 评论 -
Linux线程的分离(detached)与结合(joinable)
转载地址:http://www.cnblogs.com/mydomain/archive/2011/08/14/2138454.htm线程的分离与结合 在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回...转载 2018-03-15 23:29:39 · 6391 阅读 · 1 评论 -
很多人居然以为select/poll/epoll是用来实现后台服务并发的?
网上资料,很多都是以讹传讹,到处复制粘贴,不可尽信。 我们需要有自己的判断。 来说说后台服务模型: 1. 迭代服务器 简单说,就是在while中循环accept, 然后处理。显然, 这种服务是没有并发功能的, 后一个请求必须等前一个请求处理完毕, 才会被处理。 2. 多线程模型 简单说, 在while循环中...原创 2018-07-07 15:02:26 · 9395 阅读 · 29 评论 -
如何获取进程的线程id?------说说gettid与pthread_self的区别
一切源于需求,需要用到,所以来说说。 之前一直用pthread_self来获取线程id, 这个id通常臭大臭大的。让我纳闷的是,翻遍了所有资料,没有办法通过linux命令来获取线程id, 我不信这个邪。 当然, 我也查到了, 可以用 ps -Tp pid或者top -Hp pid的方式来获取线程id, 我用了这两个命令,但获取不到如上的线程id...原创 2018-09-29 23:39:31 · 11647 阅读 · 3 评论 -
多线程环境下不安全的消息队列存取---线程不同步会造成隐患
前面, 我们把消息队列存取都放在主线程中, 而在实际应用中, 很多时候, 存消息队列在主线程, 取消息队列在其他线程(如网络线程)。 下面, 我们将之前的程序改为多线程程序:#include #include using namespace std;#define Rectangle MyRectangle // 避免Rectangle与Windows中的Rectangle冲突/原创 2014-12-06 00:17:31 · 9767 阅读 · 0 评论 -
Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
进程间的通信方式有很多种, 上次我们说了最傻瓜的“共享文件”的方法。原创 2014-09-25 21:47:17 · 35338 阅读 · 18 评论 -
为什么两次调用同一函数, 输入相同, 输出却不同呢? (解决困扰自己好几天的问题, 还是有点激动哈, 奖励自己一顿丰厚的晚餐)
先来看看, 简单一点的情况:#include int fun(){ static int i = 0; i++; return i;}int main(){ int a = -1; int b = -1; a = fun(); printf("%d\n", a); b = fun(); printf("%d\n", b); return 0;原创 2014-09-21 14:24:45 · 12013 阅读 · 4 评论 -
线程1: i++; i++; 线程2: i+=2; 的问题 (2013年某公司笔试题目)
题目:全局的int i = 0;线程1: i++; i++; 线程2: i+=2;原创 2015-05-20 22:52:49 · 9131 阅读 · 7 评论 -
来来来, 出个题考一下你的计算机功底------程序中有某一个变量, 为什么在同一时刻有不同的值?
来来来, 出个题考一下你的计算机功底------程序中有某一个变量, 为什么在同一时刻有不同的值? 这个问题, 我在两年前碰到过, 之前在博客里面也说过。 当时, 我感到非常非常纳闷! 学电子的, 搞计算机就是伤不起啊 其实, 很简单, 多进程加载同一动态库的时候, 属于不同的进程空间, 没有毛关系, 所以值(即使是全局变量)不同是很正常的。原创 2016-12-11 09:11:18 · 7824 阅读 · 3 评论 -
线程同步之事件对象(类比互斥对象进行分析)
#include #include DWORD WINAPI Fun1Proc(LPVOID lpParameter);DWORD WINAPI Fun2Proc(LPVOID lpParameter);int tickets = 100;HANDLE g_hEvent; // 事件对象int main(){ HANDLE hThread1; HAN原创 2013-10-03 22:00:30 · 7903 阅读 · 8 评论 -
线程死锁(由哲学家就餐到售票系统)
都说哲学家最聪明,确实如此,但有时候,哲学家又是最傻的,傻傻地等待,傻傻地思考,殊不知,已经陷入死锁状态,坐等饿死。 下面还是以售票系统为例来说明死锁,直接上代码:#include #include DWORD WINAPI Fun1Proc(LPVOID lpParameter);DWORD WINAPI Fun2Proc(LPVOID lpParameter原创 2013-10-04 00:00:41 · 7935 阅读 · 6 评论 -
下面程序为什么没有一直陷入main的while(1)循环?(多线程在作怪)
很久以前,接触一个项目,看到一个while(1)死循环,但又发现程序经常跳出while去执行另外一段程序,甚为疑虑。其实,在多线程模式下,这是可能的,下面的程序就不会一直陷入main的while(1)循环:#include #include DWORD WINAPI ThreadFun(LPVOID pM){ while(1) { printf("thread\n原创 2013-10-06 21:52:34 · 11389 阅读 · 4 评论 -
界面卡死咋办?多线程来帮忙!
写了个超级简单的软件,界面如下: 1. 单线程://---------------------------------------------------------------------------#include #pragma hdrstop#include "Unit1.h"//-----------------------原创 2013-10-15 00:14:47 · 7988 阅读 · 0 评论 -
为什么cpu要一心二用:浅谈多线程编程的一个具体例子
什么是多线程,多线程就是多个执行序列。就是让cpu执行下这个序列,又执行下那个序列,不停地切换, 正所谓一心二用。 考虑一个实际场景: 客户端要向服务端发送文件,服务端会对发送文件进行检查,如果文件的头信息非法,则立即通知客户端不必继续发送,那么这个场景应该怎么处理呢? 1. 屎办法, 客户端先把文件发送完毕,然后服务端来检查。 这样肯定不好,假设文件是非法的, 那原创 2014-03-25 23:15:08 · 10420 阅读 · 1 评论 -
CreateProcess的用法
看个简单程序吧:原创 2014-04-12 21:45:14 · 8281 阅读 · 1 评论 -
如何让程序只有一个实例运行(用tftp时的感想)?
最近想搭建一个tftp原创 2014-08-10 23:36:18 · 7981 阅读 · 0 评论 -
最简单易懂的进程通信入门实例(“共享外存/文件”)
什么是进程? 这个早已经被问了无数遍了。 进程无非就是程序运行的一个实例。 你登录QQ, 那么就启动了一个QQ进程。 你再登录一个QQ, 又启用了另外一个QQ进程。 那一年, 我无聊地登录了5-6个QQ, 那是, 我启动了5-6个QQ进程。 不过, 那时候, 我还不知道什么是进程。原创 2014-09-14 21:22:18 · 8340 阅读 · 5 评论