小编blu*_*ift的帖子

多线程C应用程序框架或模式

我一直在研究一个多线程C(Linux)应用程序 - 一个录像机,它有线程用于音频和视频捕获,编码,多路复用和写入.

我开始使用pthread操作临时将它放在一起,但是现在我正在尝试扩展它以支持更多状态并重构代码块,这些代码块与锁定,设置标志和发出条件信号重复出现,以及等等.

到目前为止,我想出的是这样的:

  • 每个线程都应该有一个互斥锁和两个条件 - 一个用于唤醒线程,另一个用于表示线程已经完成了另一个线程可能正在等待的一些工作.
  • 数据队列由某个线程"拥有"并使用该线程的锁保护.
  • 每个线程都需要"活动"和"非活动"状态的概念,以及在完成之后在信号和信号之间移动的能力.

我打算将公共元素存储在一个结构中,并有一个结构数组,我可以循环来启动,检查和停止所有线程.

由于这变成了一个更通用的线程支持模型,我以为我可能会重新发明轮子,所以我会问这里是否应该应用一些众所周知的模式.

c linux embedded design-patterns pthreads

5
推荐指数
1
解决办法
776
查看次数

用于仿真的VHDL替代子模块架构

我有一个VHDL组件,它实现了DRAM测试序列.它包含一个子实体,它是DRAM控制器.

我想模拟(调试)DRAM测试序列,但是为DRAM控制器使用一个简单的假存根而不是真正复杂的东西.

有没有办法我可以设置它,也许使用VHDL配置来使用简单版本的控制器实体进行模拟?我对模拟很陌生,对VHDL一般没有太大的经验.

这是使用针对Spartan-6的Xilinx ISE和ISim,如果这有所不同的话.

simulation fpga vhdl

5
推荐指数
1
解决办法
2676
查看次数

如何找到屏障函数的实现?

我想实现新的屏障功能。

首先,我想了解默认屏障的实现。(phtread,Linux)

我找到 pthread.h (/usr/include)

但在这个文件中我找不到屏障的实现。仅有声明。

1040 /* Functions to handle barriers.  */                                       
1041 
1042 /* Initialize BARRIER with the attributes in ATTR.  The barrier is
1043    opened when COUNT waiters arrived.  */
1044 extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier,
1045                  __const pthread_barrierattr_t *__restrict
1046                  __attr, unsigned int __count)
1047      __THROW __nonnull ((1));
1048 
1049 /* Destroy a previously dynamically initialized barrier BARRIER.  */
1050 extern int pthread_barrier_destroy (pthread_barrier_t *__barrier)
1051      __THROW __nonnull ((1));
1052 
1053 /* Wait on barrier …
Run Code Online (Sandbox Code Playgroud)

c linux pthreads

4
推荐指数
1
解决办法
6077
查看次数

解决没有key-python的vigenere代码

这是我必须弄清楚的问题:

"消息已使用类中讨论的Vigenere加密方法进行加密,其密文EQNVZ已被截获.中断代码.假设密钥长度与消息相同,消息和密钥仅由大写字母组成".

有没有办法在python中这样做?我知道有一种方法可以在python中创建密文,但有没有办法走另一条路?

python encryption vigenere

2
推荐指数
1
解决办法
5135
查看次数

通过宏扩展跟踪原始行号

我正在开发一个有趣的汇编程序,用C,flex,bison编写.我想添加宏,包含和重复块,并考虑使用单独的预处理阶段解析器执行此操作.

我的问题是,我如何跟踪原始源代码行(和文件名)?这用于生成有用的错误消息,漂亮的打印和生成调试信息.

预处理完成后第二个解析器中的yylineno可能会在宏扩展后偏移,依此类推.

yacc lex compiler-theory dcpu-16

2
推荐指数
1
解决办法
265
查看次数

为什么我不能在GNU makefile中定义之后使用'='?文档建议我可以

我正试图define在GNU make中使用.在这个测试上运行make Makefile回应"虚拟":

define FOO =
$$(error foo $(1))
endef

$(eval $(call FOO,bar))

all:
    @echo dummy
Run Code Online (Sandbox Code Playgroud)

如果我删除了=,那么它会foo bar按照我的意图出错.

GNU make手册包含所有定义示例,使用带有等号的表单.为什么这对我来说似乎被忽略了?

makefile gnu-make

2
推荐指数
1
解决办法
111
查看次数

在C中进行OOP时,优雅的方式来模拟'this'指针?

我想在C中使用多态进行一些面向对象的样式编程,其中我的接口类包含一个指向函数表的指针.例如:

/* Implement polymorphism in C, Linux kernel-style */
struct statement {
    const struct statement_ops *ops;
    struct list_head list;      /* when on master input list */
    void *private;          /* pointer to type-specific data */
};

struct statement_ops {
    int (*analyse)(void *private, int pc);
    int (*get_binary_size)(void *private);
};

void user(void)
{
    struct statement *s = make_a_statement();
    if (s->ops->analyse(s->private, foo))
        blah blah;
}
Run Code Online (Sandbox Code Playgroud)

我希望能够在没有明确地将s-> private传递给每个"方法"的情况下编写内容.有任何想法吗?一些宏观技巧可能吗?

c oop polymorphism

1
推荐指数
1
解决办法
1186
查看次数