linux和windows多线程的异同

 我来答
刚发的79
2017-03-26 · 超过51用户采纳过TA的回答
知道答主
回答量:83
采纳率:0%
帮助的人:77.8万
展开全部

linux多线程及线程同步和windows的多线程之间的异同

并不是所有的程序都必须采用多线程,有时候采用多线程性能还不如单线程。采用多线程的好处如下:

(1)多线程之间采用相同的地址空间,共享大部分的数据,和多进程相比,代价比较节俭,而启动新的进程必须分配给它独立的地址空间,需要数据表来维护代码段,数据段和堆栈段等等。

(2)对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,费时而且不方便。多线程之间可以直接共享数据,比如共享全局变量。共享全局变量要注意变量的同步性,不然容易引起灾难性的后果。

(3)在多cpu的情况下,不同的线程可以运行在不同的cpu下,这样就完全并行了。

在这种情况下,采用多线程比较理想。比如要做一个任务分2个步骤,为提高工作效率可以多线程技术开辟2个线程,第一个线程做第一步,第2个线程做第2步。这个时候要注意同步。因为只有第一步做完才能做第2步的工作。这时,可以采用同步技术进行线程之间的通信。

针对这种情况,讲解一下多线程之间的通信,在windows平台下,多线程之间通信采用的方法主要有:

(1)共享全局变量,比如上面的问题,第一步要向第2步传递收据,可以共享全局变量,让两个线程之间传递数据,这时主要考虑的问题就是变量的同步,因为后面的线程在对数据进行操作的时候,第一个线程又改变了数据的内容,不同步保护,后果很严重(即读回脏数据)。这种情况下,容易想到的同步方法是设置一个bool flag,比如在第2个线程还没有用完数据前,第一个线程不能写入。有时在2个线程所需的时间不相同的时候,怎样达到最大效率的同步,就比较麻烦。 这时可以多开几个缓冲区进行操作。如果是2个线程一直在跑,由于时间不一致,缓冲区迟早会溢出。在这种情况下要考虑:是不让数据写入还是让数据覆盖掉旧的数据。这时候要具体问题具体分析。即用bool变量控制同步,linux 和windows是一样的。

同样针对上面的这个问题,共享全局变量同步问题。除了采用bool变量外,还有互斥量。即加锁。windows下加锁和linux下加锁是类似的。采用互斥量进行同步,要想进入那段代码,就先必须获得互斥量。

windows下互斥量的函数有:createmutex()创建一个互斥量,然后就是获得互斥量waitforsingleobject()函数,用完了就释放互斥量ReleaseMutex(hMutex),当减到 0的时候 内核会才会释放其对象。下面是windows下与互斥的几个函数原型。

HANDLE WINAPI CreateMutex(
__in LPSECURITY_ATTRIBUTES lpMutexAttributes,
__in BOOL bInitialOwner,
__in LPCTSTR lpName

千锋教育
2018-07-05 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
linux多线程及线程同步和windows的多线程之间的异同
并不是所有的程序都必须采用多线程,有时候采用多线程性能还不如单线程。采用多线程的好处如下:
(1)多线程之间采用相同的地址空间,共享大部分的数据,和多进程相比,代价比较节俭,而启动新的进程必须分配给它独立的地址空间,需要数据表来维护代码段,数据段和堆栈段等等。
(2)对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,费时而且不方便。多线程之间可以直接共享数据,比如共享全局变量。共享全局变量要注意变量的同步性,不然容易引起灾难性的后果。
(3)在多cpu的情况下,不同的线程可以运行在不同的cpu下,这样就完全并行了。
在这种情况下,采用多线程比较理想。比如要做一个任务分2个步骤,为提高工作效率可以多线程技术开辟2个线程,第一个线程做第一步,第2个线程做第2步。这个时候要注意同步。因为只有第一步做完才能做第2步的工作。这时,可以采用同步技术进行线程之间的通信。
针对这种情况,讲解一下多线程之间的通信,在windows平台下,多线程之间通信采用的方法主要有:
(1)共享全局变量,比如上面的问题,第一步要向第2步传递收据,可以共享全局变量,让两个线程之间传递数据,这时主要考虑的问题就是变量的同步,因为后面的线程在对数据进行操作的时候,第一个线程又改变了数据的内容,不同步保护,后果很严重(即读回脏数据)。这种情况下,容易想到的同步方法是设置一个bool flag,比如在第2个线程还没有用完数据前,第一个线程不能写入。有时在2个线程所需的时间不相同的时候,怎样达到最大效率的同步,就比较麻烦。 这时可以多开几个缓冲区进行操作。如果是2个线程一直在跑,由于时间不一致,缓冲区迟早会溢出。在这种情况下要考虑:是不让数据写入还是让数据覆盖掉旧的数据。这时候要具体问题具体分析。即用bool变量控制同步,linux 和windows是一样的。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
多虑了图
2017-03-26 · TA获得超过131个赞
知道答主
回答量:164
采纳率:0%
帮助的人:58.6万
展开全部
Linux的线程是共享内存空间的多个进程,windows是一个进程。windows线程之间相互作用比linux强
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式