原文由本人发表于GTK+ 中文社区。
以下是格式化+patched版本。
----------------------
个人风格严重的编程笔记,不适合入门用,仅适合参考
参考或许算不上,大概就是个备忘吧
有不懂的或需要详细内容请参考文后给出的参考文献
基础使用
首先,要加载使用GThread,调用
//----- #include <glib.h> g_thread_init (NULL); /* 如果非零,首先确认自己在做什么 */
创建线程,
//----- #include <glib.h> g_thread_create /* 省略 */
等待线程,
//----- #include <glib.h> g_thread_join /* 省略 */
一般不会需要从外部结束进程,这因为线程不会影响主线程。
要从线程内退出线程也就是个return NULL之类的,不需要什么exit。
互斥锁
互斥锁,意思也就是字面意思(翻译的很巧妙呀)。个人认为还有一种方法也可以实现互斥锁。
gboolean RUNNING = FALSE; gpointer thread1_callback (gpointer data) { while (RUNNING) sleep(1); RUNNING = TRUE; //开始处理(通知其他线程不要抢资源了) // 处理 RUNNING = FALSE; //处理完毕(可以让其他线程运行了) } /* 问题是如果两个线程同时执行RUNNING=TRUE怎么办?虽然概率极小 */
g_mutex_lock和g_mutex_trylock的区别
lock:如果没有锁,锁之;否则,等待另一线程unlock。
trylock:一次性动作。如果没有锁,锁之;否则返回错误信息。
如果操作结束,一定要g_mutex_unlock,否则会发生无限等待(我也才懂了互斥锁是什么,虽然我觉得可能就是传说中的死锁,但在自己没搞明白前不敢妄下评论。)。
----------