STA和MTA线程模式的区别是什么??? 头有点晕了已经

来源:百度知道 编辑:UC知道 时间:2024/05/25 02:24:08
网上看到 :
“在STA线程模式中,对线程的所有调用都放到一个队列中,然后逐个处理这些调用。因此,STA线程永远不会同时执行多个方法。STA线程有自己的专有数据,它们不会在线程之间共享数据。这一特征使这一线程模式非常安全,避免了数据的损坏和同步问题”。

问:
如果这样说的话,那就是使用STA线程模式的程序应该是任何时候都是单线程运行的,那么为什么我的多线程程序还能正常运行呢?而且结果也是正确的。

==========================================

还有就是:“MTA单元可以同时运行多个线程,并使用所有可用的共享数据”

对于这段话,我就更晕了,它们是如何使用共享数据的??具体是怎么操作的??

能具体点更好!

问:
如果这样说的话,那就是使用STA线程模式的程序应该是任何时候都是单线程运行的,那么为什么我的多线程程序还能正常运行呢?而且结果也是正确的。

回答:
你的程序到底是多线程还是单线程完全看你怎么写的,跟使用单线程还是多线程库没有任何关系。但是,在使用单线程库时,如果你在非主线程(你程序进入主函数的第一个线程是主线程)使用线程不安全的函数(如IO函数,内存函数),那么就有可能出现问题,当然这些问题你是否会碰到,这也要看具体情况。
如果使用多线程库,也要注意符合其使用规矩,例如在哪个线程获得的资源就在哪个线程使用,因为个别资源是线程敏感的。还有其他类似的问题。问题的碰到也要看你的代码决定。
你就是恰好没碰到那些问题,或没有用到线程不安全的东西。

“MTA单元可以同时运行多个线程,并使用所有可用的共享数据”
回答:
在多个线程进行操作时,这个库里面的函数考虑到多线程可能带来的问题(如IO同步等),进行特别设计,这个库尽量将多个线程可以共享的资源共享起来(在一定程度上IO等确实可以共享起来),但是你最好小心使用,因为你的脑子比当前任何计算机都聪明。

STA模式是指任何时刻只能有一个客户线程来访问该组件,不是说不能被多线程的客户端来调用!你使用多线程来访问STA对象的时候,请求会被串行化到一个windows消息队列中,队列中的请求逐个被执行,所以在编写STA组件时,程序员无需关心线程同步的问题
你在CSDN的问题已经有人回答了,块去看。