ソフトウェア設計及び演習2013

GLib::スレッド

マルチスレッド

変数を共有して,別々に動くプログラムのこと(軽量プロセスとも呼ばれる)

制御の流れを複数作ることが可能

Threadマニュアル@

簡単なプログラムがリポジトリにあります。

  • thread.c
    • 二つのスレッドが同じラベルに違う文字列を表示する例
  • thread2.c
    • よりシンプルに

排他制御

複数のスレッド間では大域変数を共有する

排他的な操作のために下記を利用する

  • 共有ロック
  • gtk/gdk処理の排他制御
ロック変数の宣言
 G_LOCK_DEFINE_STATIC (window_access);
 static volatile int window_access;
排他制御(排他的にラベルのテキストを書き換える)
  • 「排他的に行う処理」を行い
  • ロックを外す
  sleep(g_random_int_range (1, 4));
  G_LOCK(window_access);
  gdk_threads_enter();
  gtk_label_set_text(GTK_LABEL(label), args);
  gdk_flush ();
  gdk_threads_leave();
  G_UNLOCK(window_access);

スレッドの作成

g_thread_create

  if (!g_thread_create(argument_thread, "私はカモメ", FALSE, &error))
    {
      g_printerr ("Failed to create YES thread: %s\n", error->message);
      return 1;
    }


最終更新日:2013/10/23 15:26:35