读书人

请问多个线程的同步有关问题

发布时间: 2012-02-12 17:16:34 作者: rapoo

请教多个线程的同步问题
现在有三个线程,想要每个线程依次执行,是需要做互斥或加Lock吧?
本人目前只会写两个线程的互斥操作,三个的是不是也一样呢?
据说使用临界区比互斥的效率高一些,是这样吗?
对于三个线程,加锁的程序应该怎么写呢?有知道的朋友给个大概的步骤就行,谢谢了!!!

[解决办法]
多线程的同步策略不是这样设计的。。。同步的目的是,对于共享的敏感数据,一次只有一个线程可以访问;也就是说,如果需要访问资源 A ,就一定要加同一个锁(mutex, 临界区,都一样);至于线程的执行顺序,是不确定的。
[解决办法]
据说使用临界区比互斥的效率高一些,是这样吗?

--

是的。互斥是系统内核对象,调度起来需要数千个cpu时间
[解决办法]
所有的对外请求都发给第四个线程。它自己再起一个定时器,每多少毫秒向外发N个请求即可。
[解决办法]
LZ的这个情况应该另起一个thread用来将其他thread发来的消息排队,然后统一发送出去。可以用消息队列实现3个工作线程和发消息的线程的通信。不同的操作系统原语不同,但是原理大致是一样的。怎样实现LZ查一查你用的操作系统的手册吧。
[解决办法]
1.现在有三个线程,想要每个线程依次执行
-------------------------
线程本来就是依次执行的,时间片的概念LZ还需理解

2.本人目前只会写两个线程的互斥操作,三个的是不是也一样呢?
---------------------------
互斥作用废老大说的很清楚了,3个一样
3.据说使用临界区比互斥的效率高一些,是这样吗?
------------
同五散人
4.对于三个线程,加锁的程序应该怎么写呢
--------------------
2个的你理解了,3个的一样
4.
[解决办法]
关于互斥体和临界区,根据Imperfect C++一书中Wilson的测试(31个竞争线程1000万次操作),对于单处理器来说,临界区高效的多,不过对于对称多处理器,这两者几乎同样低效……

具体可以看看《Imperfect C++》的10.3.3

读书人网 >C++

热点推荐