当前位置: 首页 > 知识库问答 >
问题:

并发编程:我应该先编写顺序程序,然后添加线程安全吗?

程和畅
2023-03-14

我正在做一个项目,我们必须创建许多线程(实际数量将由测试人员输入(TA))。我不仅在编程方面遇到了问题,而且在设计方面也遇到了问题,我无法全神贯注于所有将被调用的线程以及我可能导致错误的地方。项目很快就要完成了,所以如果它真的会让我倒退,我不想在这上面浪费时间,但我想知道我是否应该编写程序,就像只有一个线程将运行一样,所有内容都应该是连续的,然后再回去尝试html" target="_blank">添加代码的线程安全部分?这会花费两倍的时间吗?

项目描述:注意:我会尽量含糊,以免违反任何荣誉准则,抱歉:(

您的程序应该接受n个objectA线程、m个objectB线程和r个objectC线程

objectB线程与objectA中的代码交互。objectA线程与objectB和objectC中的代码交互objectB和objectC不直接交互,而是通过objectA间接交互-例如:objectB需要objectA提供的一些东西。objectA通过调用objectC获取该内容的结果

我的困惑主要源于这样一个事实,即所有这些交互都将由m n个线程完成,并且在整个描述中存在各种限制,例如对象B可以从对象A请求一些东西,并且对象A必须等待对象C完成该东西才能将其返回给对象B。此外,每个对象A线程一次只能处理来自对象B的一条指令,等等。

我只是想知道,如果我编写的代码只有1个objectA、1个objectB和1个objectc,我可以返回并轻松地修改它,以便将这些1更改为m、n和r吗?

再次抱歉,如果我的描述有点混乱。

共有1个答案

彭高畅
2023-03-14

我想知道我是否应该编写程序,就像只有一个线程在运行一样,一切都应该是连续的,然后再回去尝试添加代码的线程安全部分?

我会先让程序以最少的线程运行。然后我会重新编写它以使用多个线程。您不应该低估这可能需要多少工作,并且您必须在这样做时重新访问所有假设。

这会花费原来两倍的时间吗?

至少是两倍长,但更有可能奏效。如果你试图一次完成所有的工作,很可能你最终会陷入一片混乱,而不是根本无法工作。如果您的努力得到了分数,并且如果您有时遇到线程安全错误也无关紧要,那么“一次完成”方法可能会给您最好的分数。如果您是专业开发人员,那么最好让某个东西在一个线程中工作,而不是让某个东西在使用多个线程时出现罕见且不可再现的错误。

 类似资料:
  • translated_page: https://github.com/PX4/Devguide/blob/master/en/tutorials/tutorial_hello_sky.md translated_sha: 95b39d747851dd01c1fe5d36b24e59ec865e323e translated: true 第一个应用程序教程(Hello Sky) 本教程详细解释了如

  • 并发是什么?引用Rob Pike的经典描述: 并发是同一时间应对多件事情的能力 其实在我们身边就有很多并发的事情,比如一边上课,一边发短信;一边给小孩喂奶,一边看电视,只要你细心留意,就会发现许多类似的事。相应地,在软件的世界里,我们也会发现这样的事,比如一边写博客,一边听音乐;一边看网页,一边下载软件等等。显而易见这样会节约不少时间,干更多的事。然而一开始计算机系统并不能同时处理两件事,这明显满

  • 问题内容: MyDialog类只有很少的组合和文本字段,并且正在用DB值填充组合。在选择一个组合值时,我从数据库获取了另一个值以填充下一个组合。 上面的程序以相同的方式运行,而不使用invokeLater线程。什么时候invokeLater在Swing编程中变得有用。我已经读过一些,但似乎都是理论上的。invokeLater对应用程序有什么区别?仅在main方法内部使用它就足够了还是应该在操作侦听

  • 应用程序开发人员使用composer-clientnpm模块以编程方式连接到已部署的业务网络,创建、读取、更新、删除资产和参与者,以及提交交易。如果应用程序需要能够部署或管理业务网络,则可以使用composer-adminnpm模块。 示例landregistry.js文件包含一个代表土地注册的类,并包含列出土地权证、添加默认权证和提交交易的方法。这已经使用JavaScript类实现了; 然而,你

  • 本章讲解 Rust 中,并发,并行,多线程编程的相关知识。

  • 3.6. 编写程序 以file.go代码为例,用以下命令编译: $ 6g file.go 6g是针对amd64指令的编译器,它的输出文件为 file.6。其中 ‘6’ 表示文件是 amd64指令的输出文件。 如果是386和arm 处理器,后缀则为 8 和 5。 也就是说,如果你用的是386处理器,那么应该用8g命令编译, 输出的文件为file.8。 然后用以下命令连接: $ 6l fil