多线程编程学习3

原创 2016年08月29日 16:47:49

实现多线程同步的方式:

Critical Section

用来实现“排他性占有”。适用范围是单一进程的各线程之间。他是:
一个局部性对象,不是一个核心对象。
快速而有效率
不能够同时有一个以上的critical section被等待。(只能同时一个)。
无法侦测是否已经被某个线程放弃。


Mutex
是一个核心对象,可以在不同的线程之间实现“排他性占有”,甚至即使那些线程分属不同进程,它是:
一个核心对象。
如果拥有mutex 的那个线程结束,则会产生一个“abandoned”错误信息。
可以使用Wait...()等待一个Mutex
可以具名,因此可以被其他进程开启。
只能被拥有它的那个线程释放(released).


Semaphore
被用来追踪有限的资源,它是:
一个核心对象。
没有拥有者。
可以具名,因此可以被其他进程开启
可以被任何一个线程释放(released)


Event Object
通常用于overlapped I/O(第6章),或用来设计某些自定义的同步对象。它是:
一个核心对象。
完全在程序掌控之下。
适用于设计新的同步对象。
“要求苏醒”的请求并不会被存储起来,可能会遗失掉。
可以具名,因此可以被其他进程开启。


Interlocked Variable
如果Interlocked...()函数被使用于所谓的spin-lock,那么它们只是一种同步机制。所谓spin-lock是一种busy loop,被预期在极短时间内执行,所以有最小的额外负担(overhead)。系统核心偶尔会使用它们。除此之外,interlocked variables 主要用于引用计数,它们:
允许对4字节的数值有些基本的同步操作,不需动用critical section 或mutex 之类。
在SMP(Symmetric Multi-Processors)操作系统中亦可有效运作。

从零学习linux多线程编程--第一篇

线程(thread)技术早在60年代就被提出,但真正应用多线程到 ***作系统中去,是在80年代中期,solaris是这方面的佼佼者。传统的Unix也支持线程的概念,但是在一个进程(process)中...
  • sunsnow2
  • sunsnow2
  • 2014年08月19日 20:59
  • 554

C++11多线程学习记录(一)

C++ 11 多线程 一
  • csxiaoshui
  • csxiaoshui
  • 2015年03月10日 16:50
  • 2593

python3 多线程编程

0.什么是线程 1. 多线程模块 2. 创建线程的方法 3. join()方法 4.isAlive()方法 5. name属性和daemon属性 6.线程的同步---锁 7.线程的同步-...
  • u014453898
  • u014453898
  • 2017年05月08日 14:10
  • 2520

多线程编程 之 入门篇

自己第一次涉及c语言的多线程编程,实属入门了解级别的;之前只做过java的Runnable的多线程编程。本次我们可以把屏幕看成是一个资源,这个资源被两个线程所共用, /* #include #in...
  • u010700335
  • u010700335
  • 2014年09月25日 19:57
  • 2384

c#.net 多线程编程学习(3)

Case 学习多线程在前面的多线程编程系列的文章中,我们了解了在.NET中多线程编程必须要掌握的基本知识,但是可能大家看了文章之后,感觉还是很模糊,对一个具体的编程可能还是觉得无从下手,究其原因可能是...
  • coon32
  • coon32
  • 2008年11月24日 22:50
  • 424

C++多线程编程(入门实例)

多线程在编程中有相当重要的地位,我们在实际开发时或者找工作面试时总能遇到多线程的问题,对多线程的理解程度从一个侧面反映了程序员的编程水平。   其实C++语言本身并没有提供多线程机制(当然目前C++ ...
  • csx66406602
  • csx66406602
  • 2017年01月21日 15:25
  • 820

【windows--进程和线程】多线程编程(比较完整的简单介绍)

一、问题的提出 编写一个耗时的单线程程序:   新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP...
  • wangjianzhongfj
  • wangjianzhongfj
  • 2012年03月08日 22:46
  • 2557

《Java多线程编程核心技术》(一)多线程技能

最近阅读了一本《Java多线程编程核心技术》,总结了一下每章的知识点:第一章,java多线程技能 知识点:1,实现多线程编程的方式主要有两种:一是继承Thread类,重新run方法,二是实现Runna...
  • wfzczangpeng
  • wfzczangpeng
  • 2016年09月20日 23:04
  • 979

多线程编程3

线程清理处理函数: void pthread_cleanup_push(void (*rtn)(void *), void *arg ); 设置清理函数 void pthread_cleanup_po...
  • tripleCC
  • tripleCC
  • 2014年04月30日 18:23
  • 247

多线程编程php

早期的php并不支持多线程编程,采用curl_muti系列族模拟实现多线程,到现在已经可以实现多线程编程,并且线程安全机制ZTS( zend thread safe)多线程安全就是保证多个线程安全存取...
  • qq_21034239
  • qq_21034239
  • 2016年12月30日 10:31
  • 344
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多线程编程学习3
举报原因:
原因补充:

(最多只允许输入30个字)