多线程应用程序的最佳 C 模式

问题描述 投票:0回答:1

我正在尝试实现多线程应用程序,其中每个线程都执行 FSA。

FSA 最初是为嵌入式应用程序编写的,现在我需要制作该 FSA 的模拟器,并在每个不同的线程中执行其中的n

让我们深入研究单个 FSA 的一些代码:

├── inc
│   ├── common
│   │   └── controller_def.h
│   ├── controller.h
│   ├── controller_table.h
│   ├── fsa_1
│   │   ├── bar.h
│   │   ├── baz.h
│   │   ├── controller_def.h
│   │   └── foo.h
│   ├── fsa_2
│   │   ├── controller_def.h
│   │   ├── cor.h
│   │   ├── qux.h
│   │   └── wal.h
│   ├── manager.h
│   ├── queue.h
│   └── trace.h
├── src
│   ├── controller.c
│   ├── fsa_1
│   │   ├── bar.c
│   │   ├── baz.c
│   │   ├── controller_def.c
│   │   └── foo.c
│   ├── fsa_2
│   │   ├── controller_def.c
│   │   ├── cor.c
│   │   ├── qux.c
│   │   └── wal.c
│   ├── main.c
│   ├── manager.c
│   ├── queue.c
│   └── trace.c
#ifndef __CONTROLLER_H__
#define __CONTROLLER_H__

#include "controller_table.h"
#include "common/controller_def.h"

typedef struct Controller_S
{
    Controller_State state;

    EN_Table_ID curr_func;
    EN_Table_ID last_func;

    Executive_Node *en_table;
    Transition **tc_table;
} Controller;

void
controller_init
(
    Controller *ctrl, EN_Table_ID first_func,
    Executive_Node *en, Transition **tc
);

void
controller_execute(Controller *ctrl);

void
controller_deinit(Controller *ctrl);

#endif /* __CONTROLLER_H__ */

因此,有 2 个基表提供 FSA 的正确执行:

en_table
- 提供基于枚举的函数指针
EN_Table_ID
tc_table
- 提供基于当前状态、最后一个函数及其结果的转换表.

因此,正如您在工作树中看到的那样,有 2 个目录用于

fsa_1
fsa_2
,其中是专门针对每个 FSA 的函数,还有
controller_def.c
定义了这些表。

现在的问题是:如何使其成为区分表和某些枚举名称的最佳方式,但尽可能保持通用。

我考虑了一些预处理魔法,其中每个 typedef 都将被预处理,就像额外的“名称修改”一样,但我认为这种方法有点尴尬,所以我对一些建议持开放态度!

提前致谢!

c multithreading
1个回答
0
投票

很抱歉,您几乎没有提供任何帮助他人帮助您做您想做的事情。您提供了一个函数,该函数创建了许多不初始化任何内容的变量,以及几个根本没有定义的原型。

您似乎认为所有有限状态自动机都具有完全相同的框架,因此所有代码必须具有相同的“形状”供您填充。我讨厌戳破你的泡沫,但不。

多线程代码比您提供的骨架框架有更多的考虑因素,因此没有人可以在这里帮助您。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.