Как реализовать Mutex в Python при использовании Gtk с PyGTK - PullRequest
0 голосов
/ 15 января 2011

У меня есть приложение, которое запускает несколько потоков, используя

gobject.timeout_add(delay, function)

Теперь в моей функции я хочу проверить и установить некоторую переменную, например,

def function(self):<br> if flag == True: flag = False doSomething()

Теперь, чтобы сделать этот потокобезопасным, мне пришлось бы заблокировать функцию с помощью блокировки мьютекса.Это возможно с Gtk?Или я могу использовать объекты Python Lock из threading?

1 Ответ

0 голосов
/ 15 января 2011

Я только что узнал, что gobject.timeout_add(delay, function) и gobject.idle_add(function) безопасны в использовании.Я попробовал это, используя

for i in range(X):
    gobject.idle_add(workerFunction)

и обнаружил, что НИКОГДА не выполняются два рабочих потока одновременно.Это означает, что кажется, что вызовы функций, выполняемые gobject.timeout_add(delay, function) и gobject.idle_add(function), являются атомарными в том смысле, что они выполняются всегда строго один за другим.Таким образом, даже простая проверка, опубликованная в вопросе, не является необходимой.

На самом деле я не мог заставить себя проявить какое-либо состояние гонки независимо от того, что я сделал.Таким образом, дополнительный механизм блокировки не требуется.

...