Lv.的博客
摘要: 陈大师的文章,核心就是利用__sync_bool_compare_and_swap来尝试无锁操作,在组里的svr状态统计的代码看里看到类似用法。可以有效的避免用锁,但是感觉有死循环的风险,所以一般__sync_bool_compare_and_swap只尝试有限次数比较合适。对__sync_bool... 阅读全文
posted @ 2015-05-08 16:18 Avatarx 阅读(1230) 评论(0) 推荐(1)
摘要: 前几篇文章,我们讨论了如何使用mutex保护数据及使用使用condition variable在多线程中进行同步。然而,使用mutex将会导致一下问题:等待互斥锁会消耗宝贵的时间 — 有时候是很多时间。这种延迟会损害系统的scalability。尤其是在现在可用的core越多越多的情况下。低优先级的... 阅读全文
posted @ 2015-05-08 16:00 Avatarx 阅读(1823) 评论(0) 推荐(1)
摘要: 什么是句柄:句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础... 阅读全文
posted @ 2015-05-08 15:52 Avatarx 阅读(721) 评论(0) 推荐(0)
摘要: #include#include//#include//#include#defineUM_MSG1(WM_USER+1)#defineUM_MSG2(WM_USER+2)DWORDWINAPIThread1(LPVOIDpara){DWORDdwThreadId=*(DWORD*)para;DWO... 阅读全文
posted @ 2015-05-08 15:46 Avatarx 阅读(463) 评论(0) 推荐(0)
摘要: 内核对象的基本概念Windows系统是非开源的,它提供给我们的接口是用户模式的,即User-Mode API。当我们调用某个API时,需要从用户模式切换到内核模式的I/O System Services API。例如我们调用Kernel32.dll中的CreateFile创建文件,最终将执行ntdl... 阅读全文
posted @ 2015-05-08 15:37 Avatarx 阅读(471) 评论(0) 推荐(0)
摘要: Win32线程控制只有是围绕线程这一内核对象的创建、挂起、恢复、终结以及通信等操作,这些操作都依赖于Win32操作系统提供的一组API和具体编译器的C运行时库函数。本篇围绕这些操作接口介绍在Windows系统下的多线程编程要点,后续将进一步涉及多线程通信的同步互斥等议题。1.线程的创建(Create... 阅读全文
posted @ 2015-05-08 15:35 Avatarx 阅读(1514) 评论(0) 推荐(0)
摘要: 一.线程间数据通信系统从进程的地址空间中分配内存给线程栈使用。新线程与创建它的线程在相同的进程上下文中运行。因此,新线程可以访问进程内核对象的所有句柄、进程中的所有内存以及同一个进程中其他所有线程的栈。这样一来,同一个进程中的多个线程可以很容易的相互通信。到目前为止,将数据从一个线程传到另一个线程的... 阅读全文
posted @ 2015-05-08 15:33 Avatarx 阅读(425) 评论(0) 推荐(0)
摘要: 介绍本文旨在帮助有经验的Win32程序员来了解c++ 11线程库及同步对象 和 Win32线程及同步对象之间的区别和相似之处。在Win32中,所有的同步对象句柄(HANDLE)是全局句柄.它们可以被共享,甚至可以在进程间复制。在C++11中,所有的同步对象都是栈(stack)对象,这意味着它们必须是... 阅读全文
posted @ 2015-05-08 15:27 Avatarx 阅读(729) 评论(0) 推荐(1)
摘要: thread_group是boost库中的线程池类,内部使用的是boost::thread。随着C++ 11标准的制定和各大编译器的新版本的推出(其实主要是VS2012的推出啦……),本着能用标准库就用标准库的指导原则,决定把项目中多线程相关的部分代码从boost::thread迁移到std::th... 阅读全文
posted @ 2015-05-08 15:12 Avatarx 阅读(514) 评论(0) 推荐(0)
摘要: 下面是一个生产者消费者问题,来介绍condition_variable的用法。当线程间的共享数据发生变化的时候,可以通过condition_variable来通知其他的线程。消费者wait 直到生产者通知其状态发生改变,Condition_variable是使用方法如下:·当持有锁之后,线程调用wa... 阅读全文
posted @ 2015-05-08 15:11 Avatarx 阅读(710) 评论(0) 推荐(0)
摘要: C++11开始支持多线程编程,之前多线程编程都需要系统的支持,在不同的系统下创建线程需要不同的API如pthread_create(),Createthread(),beginthread()等,使用起来都比较复杂,C++11提供了新头文件、、、等用于支持多线程。使用C++11开启一个线程是比较简单... 阅读全文
posted @ 2015-05-08 15:10 Avatarx 阅读(349) 评论(0) 推荐(0)
摘要: 从我最近发布的C++11线程教学文章里,我们已经知道C++11线程写法与POSIX的pthreads写法相比,更为简洁。只需很少几个简单概念,我们就能搭建相当复杂的处理图片程序,但是我们回避了线程同步的议题。在接下来的部分,我们将进入C++11多线程编程的同步领域,看看如何来同步一组并行的线程。我们... 阅读全文
posted @ 2015-05-08 15:09 Avatarx 阅读(279) 评论(0) 推荐(0)
摘要: 本篇教学代码可在GitHub获得:https://github.com/sol-prog/threads。在之前的教学中,我展示了一些最新进的C++11语言内容:1.正则表达式(http://solarianprogrammer.com/2011/10/12/cpp-11-regex-tutoria... 阅读全文
posted @ 2015-05-08 15:08 Avatarx 阅读(458) 评论(0) 推荐(0)
摘要: C++11开始支持多线程编程,之前多线程编程都需要系统的支持,在不同的系统下创建线程需要不同的API如pthread_create(),Createthread(),beginthread()等,使用起来都比较复杂,C++11提供了新头文件、、、等用于支持多线程。使用C++11开启一个线程是比较简单... 阅读全文
posted @ 2015-05-08 14:57 Avatarx 阅读(250) 评论(0) 推荐(0)
摘要: 利用boost的thread实现一个线程类,维护一个任务队列,以便可以承载非常灵活的调用。这个线程类可以方便的为后面的线程池打好基础。线程池还是动态均衡,没有什么别的。由于minGW 4.7 对 C++11 thread 不支持,所以采用 boost 代替,linux 下是支持的,只是名字空间不同而... 阅读全文
posted @ 2015-05-08 13:46 Avatarx 阅读(708) 评论(0) 推荐(0)
摘要: [size=small]首先下载:http://www.threadingbuildingblocks.org/uploads/77/111/2.1/tbb21_20080605oss_win.zip当前是2.1版本解压到c盘,打开vs2005,设置vc++的项目目录include:C:\tbb21... 阅读全文
posted @ 2015-05-08 07:18 Avatarx 阅读(4549) 评论(0) 推荐(0)
摘要: 获取TBBTBB的官方网站在http://threadingbuildingblocks.org/,可以在它的Downloads页面里找到Commercial Aligned Release,最新版是tbb20_014,Windows上开发需要下载tbb20_014oss_src.tar.gz和tb... 阅读全文
posted @ 2015-05-08 07:16 Avatarx 阅读(1598) 评论(0) 推荐(0)