2
22
2011
2

C、Gtk+、Glib编程随笔——GThread 基础功能小记

原文由本人发表于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,否则会发生无限等待(我也才懂了互斥锁是什么,虽然我觉得可能就是传说中的死锁,但在自己没搞明白前不敢妄下评论。)。

----------

参考文献

  1. GLib Threads API 参考
Category: 胡说 | Tags: | Read Count: 3960

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Powered by Chito | Hosted at is-Programmer | Theme: Aeros 2.0 by TheBuckmaker.com