Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 多线程项目结构_C_Multithreading_Project Structure - Fatal编程技术网

C 多线程项目结构

C 多线程项目结构,c,multithreading,project-structure,C,Multithreading,Project Structure,我正在开发一个涉及三个线程之间交互的项目。 线程函数的代码非常长,将所有内容都放在一个文件中似乎不是一个好主意,因为它变得不可管理 单独编译线程函数,然后链接所有内容是一个有意义的解决方案吗 显然,线程之间共享了很多数据结构 将项目分割成更多文件的正确方法是什么 单独编译线程函数,然后链接所有内容是一个有意义的解决方案吗 一般来说:是的 将公共内容(如类型和定义)放入头文件(.h),然后由需要它们的模块(.c)包含 每个模块还获得其单独的头文件,为其功能提供原型。这里是我最近做的一件事,它与您的

我正在开发一个涉及三个线程之间交互的项目。 线程函数的代码非常长,将所有内容都放在一个文件中似乎不是一个好主意,因为它变得不可管理

单独编译线程函数,然后链接所有内容是一个有意义的解决方案吗

显然,线程之间共享了很多数据结构

将项目分割成更多文件的正确方法是什么

单独编译线程函数,然后链接所有内容是一个有意义的解决方案吗

一般来说:是的

将公共内容(如类型和定义)放入头文件(.h),然后由需要它们的模块(.c)包含


每个模块还获得其单独的头文件,为其功能提供原型。

这里是我最近做的一件事,它与您的要求类似。我采用的方法可能对你有所帮助。它是用C++完成的,但是在C.
  • 通常,应用程序的
    main
    在一个单独的文件中运行,并且该文件除了
    main
    之外没有太多内容(除了一些静态全局常量)

  • 然后是一个管理器类(或结构)。因此,main所做的只是创建该管理器类的实例并运行它。管理器具有在run方法期间创建的私有类实例(每个线程一个)。在我的例子中,功能显然是独立的,所以我在独立的源文件中实现了它们,并且向调用者管理器类公开了非常有限的接口。这样做的目的是可以非常轻松地扩展功能,而无需经理知道

  • 如果共享数据有更多的操作,我会使用共享数据结构,并在单独的文件中实现。在与线程关联的每个类中,这些共享数据结构的指针(或向量或任何东西)都是可用的

  • 但是2和3都是由您在每个线程中所做的操作定义的。如果大多数线程相同,您可能希望将它们合并在一起,但仍然希望将共享数据单独保存在一个文件中。至少有助于一个人在逻辑上构造头脑中的代码。在您的例子中,如果您希望在
    c
    中实现,并且最终会进行大量的复制,那么最好将所有特定于线程的实现放在一个文件中,并使用静态函数(用于向世界其他地方隐藏信息)

    话虽如此,您可能希望首先从几个文件开始
    -一个驱动程序-一个实现
    main
    和 -实现所需功能的另一种方法(对于两个线程可能是) 然后在开始添加更多代码时开始分离。这将帮助您开始编写一些代码,而无需花费大量时间思考如何组织代码。记住,第一次把事情做好通常是很困难的,所以一个有价值的想法是先做一些有效的事情,然后再把事情转过来

    始终开始编写
    Makefile
    也是一个好主意。当你移动东西的时候建造东西会容易得多


    希望有帮助

    可以将线程视为一个模块,即使没有其他两个线程,单个线程也毫无意义?@Luc:因此,用C特定术语“翻译单元”替换“模块”。