C# 几个线程同时调用一个方法会出问题吗?
比如有threadA、B、C3个线程,每个线程会传递给方法F()一个数组aa[],方法F()经过处理后,会返回一个字符串reccer。如果3个线程同时调用方法的话,会出问...
比如有threadA、B、C 3个线程,每个线程会传递给方法F()一个数组aa[],方法F()经过处理后,会返回一个字符串reccer。如果3个线程同时调用方法的话,会出问题吗,如果会的话怎么办?
展开
6个回答
展开全部
如果F()只是个单纯C#方法,他是不会搞错输入输出的对应关系的.
但你这F()是个设备操作方法.是否会搞错就要取决于设备和设备驱动程序了,这点你要到设别厂商那去确认.
如果设备没用分辨输入输出对的能力,那么只加锁就行了
但你这F()是个设备操作方法.是否会搞错就要取决于设备和设备驱动程序了,这点你要到设别厂商那去确认.
如果设备没用分辨输入输出对的能力,那么只加锁就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不会,电脑都是用时序来完成数据的处理,但如果f()方法处理时间长了,会引起线程的卡顿!
追问
数组aa[]是一条向仪器要数据的命令,字符串reccer是仪器反馈回来的原始数据。方法F()负责发命令要数据这个过程,把要来的reccer返回给调用它的线程。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
那要看你这个方法里面有没有公共静态变量的相关修改了。
如果没有修改公共静态变量,就不会。
如果没有修改公共静态变量,就不会。
追问
数组aa[]是一条向仪器要数据的命令,字符串reccer是仪器反馈回来的原始数据。方法F()负责发命令要数据这个过程,把要来的reccer返回给调用它的线程。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果F是一个向终端发送命令的方法,那么这里是否会出错就和仪器有着非常大的关联了
这里的核心问题在于A线程先发起请求,并开始等待F()给予返回,仪器此时处理A线程发来的请求,A线程处于等待阶段,那么如果B线程在这个时候进行请求,B线程发送给F()的请求是否会影响A线程的结果。
这在于仪器是否支持多请求并发
如果支持,那么可以使用这样的异步请求方式
如果不支持,那么需要做线程同步
这里的核心问题在于A线程先发起请求,并开始等待F()给予返回,仪器此时处理A线程发来的请求,A线程处于等待阶段,那么如果B线程在这个时候进行请求,B线程发送给F()的请求是否会影响A线程的结果。
这在于仪器是否支持多请求并发
如果支持,那么可以使用这样的异步请求方式
如果不支持,那么需要做线程同步
追问
3个线程发送的命令是不一样的,有3种不同类型的仪器,只有识别此命令的那台仪器才会给予返回,那这回是不是就不存在问题了。
比如thread1调用F()发了命令a,仪器A识别了,返回return1。但同时thread2调用F()也发了命令b,仪器B识别了,返回return2。 会出现thread1接收到return2这种情况吗?
麻烦您了,给您加分。
追答
这里也由仪器决定,如果仪器接受到了,不能识别的命令,那么它的返回是什么,你需要去过滤这种返回
如果按照你说的,一条线程对应一个设备的话,我建议你为每一个线程都做个列队,在上一次请求没有得到返回时,其他请求都列队等待,这样是最安全的,但是性能是有影响的。但如果可以明确知道设备是可以处理并发请求的,那么这就没必要了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询