【发布时间】:2014-02-27 16:50:43
【问题描述】:
我有一个小程序,它使用 glib。 您可以在 codereview 中看到它。标题是“阅读消息。有什么可以做得更好?”。 我在 main 方法中有一个无休止的 while 循环。 在这个循环中,我有一个 GTree。
int main()
{
//some setup/mallocs
GTree* t = g_tree_new_full((GCompareDataFunc)g_ascii_strcasecmp,NULL,free_data,free_data);
while (1) {
//some tasks; accessing tree
}
//some free
}
在此循环内访问树。 我希望每 x 分钟(例如每 15 分钟)更新一次这棵树。 可能吗?我怎样才能做到这一点并避免碰撞?
【问题讨论】:
-
创建两个线程。在函数中编写更新树部分。从一个线程调用函数并休眠 15 分钟。另一个线程可以做日常工作。
-
这可行,但请记住,与 glib 中的大多数数据结构一样,GTree 不是线程安全的,因此如果您想同时从多个线程访问它需要使用外部同步原语(即互斥体)。