C# 几个线程同时调用一个方法会出问题吗?

比如有threadA、B、C3个线程,每个线程会传递给方法F()一个数组aa[],方法F()经过处理后,会返回一个字符串reccer。如果3个线程同时调用方法的话,会出问... 比如有threadA、B、C 3个线程,每个线程会传递给方法F()一个数组aa[],方法F()经过处理后,会返回一个字符串reccer。如果3个线程同时调用方法的话,会出问题吗,如果会的话怎么办? 展开
 我来答
macro_yao
推荐于2018-04-08 · TA获得超过322个赞
知道小有建树答主
回答量:760
采纳率:0%
帮助的人:345万
展开全部
看你的方法与全局变量或者某一对象有没有关系, 如果有, 那么结果肯定是错的, 如果没有全局变量和对象, 只是处理返回计算结果的话, 那么没有问题
yajiedesign
2013-03-01 · TA获得超过286个赞
知道小有建树答主
回答量:479
采纳率:0%
帮助的人:304万
展开全部
如果F()只是个单纯C#方法,他是不会搞错输入输出的对应关系的.
但你这F()是个设备操作方法.是否会搞错就要取决于设备和设备驱动程序了,这点你要到设别厂商那去确认.
如果设备没用分辨输入输出对的能力,那么只加锁就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
IcebeareM
2013-03-01 · TA获得超过660个赞
知道小有建树答主
回答量:1235
采纳率:0%
帮助的人:348万
展开全部
不会,电脑都是用时序来完成数据的处理,但如果f()方法处理时间长了,会引起线程的卡顿!
追问
数组aa[]是一条向仪器要数据的命令,字符串reccer是仪器反馈回来的原始数据。方法F()负责发命令要数据这个过程,把要来的reccer返回给调用它的线程。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
虎用95
2013-03-01 · TA获得超过431个赞
知道小有建树答主
回答量:182
采纳率:0%
帮助的人:70万
展开全部
那要看你这个方法里面有没有公共静态变量的相关修改了。

如果没有修改公共静态变量,就不会。
追问
数组aa[]是一条向仪器要数据的命令,字符串reccer是仪器反馈回来的原始数据。方法F()负责发命令要数据这个过程,把要来的reccer返回给调用它的线程。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sh981013
2013-03-01 · 超过33用户采纳过TA的回答
知道答主
回答量:114
采纳率:0%
帮助的人:87.5万
展开全部
如果F是一个向终端发送命令的方法,那么这里是否会出错就和仪器有着非常大的关联了

这里的核心问题在于A线程先发起请求,并开始等待F()给予返回,仪器此时处理A线程发来的请求,A线程处于等待阶段,那么如果B线程在这个时候进行请求,B线程发送给F()的请求是否会影响A线程的结果。

这在于仪器是否支持多请求并发
如果支持,那么可以使用这样的异步请求方式
如果不支持,那么需要做线程同步
追问
  3个线程发送的命令是不一样的,有3种不同类型的仪器,只有识别此命令的那台仪器才会给予返回,那这回是不是就不存在问题了。
  比如thread1调用F()发了命令a,仪器A识别了,返回return1。但同时thread2调用F()也发了命令b,仪器B识别了,返回return2。 会出现thread1接收到return2这种情况吗?
  麻烦您了,给您加分。
追答
这里也由仪器决定,如果仪器接受到了,不能识别的命令,那么它的返回是什么,你需要去过滤这种返回

如果按照你说的,一条线程对应一个设备的话,我建议你为每一个线程都做个列队,在上一次请求没有得到返回时,其他请求都列队等待,这样是最安全的,但是性能是有影响的。但如果可以明确知道设备是可以处理并发请求的,那么这就没必要了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式