【发布时间】:2015-07-06 08:16:33
【问题描述】:
我从回调函数获取数据,例如
static char *buf;
int cb(char *c) {
// append to global var buf
append(buf, c);
return 0;
}
int foo() {
...
bar(cb); // calls cb
...
}
很明显,我将每次调用回调时的信息附加到全局 var(buf),因为我无法传递任何其他内容。现在的问题是我需要使用 POSIX 线程使这个线程安全。如何安全地检索信息?注意:我不能更改cb 的类型,它必须是int (*cb)(char *c)。
【问题讨论】:
-
您想要“安全检索”哪些“信息”?锁定
append(buf, c);不是您所需要的吗?我很困惑。 -
@meaning-matters 不会有多个线程都覆盖
buf并且锁只会阻止它同时发生吗?显然这实际上不是真正的代码,但基本上可以从cb中的c检索信息 -
是的,所有线程都会覆盖
buf。我现在更明白你想要什么了;看看here。最好对您的设计进行更广泛的了解,而不是放大似乎是问题所在;可能有不同的方式。 -
@meaning-matters 所有的答案基本上都说有比使用这些全局变通办法更好的方法。我想知道是否有更好的方法?
-
正如我昨天建议的那样,如果你能展示更广泛的设计观点,人们可能会提出“更好的方法”。
标签: c multithreading callback pthreads