线程同步问题(谢谢)

LIZHIztt 2018-11-07 10:00:26
目前有N个类,每个类中有若干方法,方法的名称,参数没有规律

class n1
{
public void method1(int a){...}
public void method2(string b){...}
public void method3(int d,string c){...}
public void method4(....){...}
}

class n2
{
public void method5(...){...}
public void method6(...){...}
public void method7(...){...}
public void method8(...){...}
}

class n3
{
public void method9(...){...}
public void method10(...){...}
public void method11(...){...}
public void method12...(){...}
}

目的是多个类中的方法同步,现在是这样实现的


首先定义一个全局静态变量

public static object locker = new object();



class n1
{
public void method1(int a)
{
lock(locker)
{
........
}
}
public void method2(string b)
{
lock(locker)
{
........
}
}
.......
}

class n2
{
public void method1(...)
{
lock(locker)
{
........
}
}
public void method2(...)
{
lock(locker)
{
........
}
}
.......
}


class n3
{
public void method1(...)
{
lock(locker)
{
........
}
}
public void method2(...)
{
lock(locker)
{
........
}
}
.......
}


功能是实现了,但是感觉这样写起来特别繁琐,想过用设计模式去解决这个问题,但是不知道从哪里切入........


...全文
72 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
LIZHIztt 2018-11-07
  • 打赏
  • 举报
回复
对于设备来讲肯定是顺序执行的 但是中间层来讲,除了控制设备还要处理一些其他任务,并返回一些数据,又是允许并发的
LIZHIztt 2018-11-07
  • 打赏
  • 举报
回复
因为需求是这样的,所有的方法中可以调用一个设备的接口(使设备产生不同的动作),但是这个设备的接口只能单线程调用
  • 打赏
  • 举报
回复
在正常的并发算法设计中,一个方法假设有几百行代码,只有其中几行代码——瞬间的代码——需要同步,而且只有算法具体涉及到的过程中的业务细节因为有共享访问冲突所以才会需要同步。 不是空洞的。
  • 打赏
  • 举报
回复
你写方法 a、b、c,然后说它们都是并发执行的,然后又说它们是互斥——同时间只能进入某一个过程代码,这就是拿着线程的概念来模拟顺序概念。何必追时髦而弄线程概念呢?
  • 打赏
  • 举报
回复
跟设计模式没有关系。 如果写一个功能方法
void meth()
{
    a();
    b();
    c();
}
这就是顺序的了。 也就是说,既然要顺序执行,那么正规地写顺序执行代码就行了。除非你懂并发,否则不要学人家乱假设什么线程。 在没有任何细节、分解描述得情况下,如果“又要并发又要同步”,其实就等于是玩儿文字游戏。过分谈技术就根本不是“正”的技术而是“邪”的技术概念。
LIZHIztt 2018-11-07
  • 打赏
  • 举报
回复
是多个代码块同步的问题
程序员的键盘 2018-11-07
  • 打赏
  • 举报
回复
设计模式
https://www.cnblogs.com/sunzhao/p/8334838.html
xuzuning 2018-11-07
  • 打赏
  • 举报
回复
lock 不是同步,而是独木桥、只限一人通过的闸口
lock 块中的代码,如果没有去访问非线程安全的公共资源的话,lock 是不需要存在的

在你的描述中,除了 locke 之外,并无任何公共资源
也没有看到你是以何种方式运行那些类方法的
那么,lock 是否只是为了减缓整个程序运行而设的,值的怀疑

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧