The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl-thread -w

# TITLE: Thread sample
# REQUIRES: Gtk

use Gtk;
use Thread;

init Gtk;

$yeas_or_no = 1;
$die = 0;

$window = new Gtk::Window;
$window->signal_connect('destroy', sub {Gtk->main_quit()});
$window->set_border_width(10);

$label = new Gtk::Label("And now for something completely different ...");
$window->add($label);

$label->show;
$window->show;

new Thread \&argument_thread, $label, 1;
new Thread \&argument_thread, $label, 0;

Gtk::Gdk->threads_enter;
Gtk->main();
$die = 1;
Gtk::Gdk->threads_leave;

sub argument_thread {
	my ($label, $what) = @_;
	my ($say_something);

	while (!$die) {
		sleep(int(rand(3)+0.5));

		{
			# scope for lock
			lock $yeas_or_no;
			$say_something = $what != $yeas_or_no;

			$yeas_or_no = $what  if $say_something;
		}
		if ($say_something) {
			Gtk::Gdk->threads_enter();
			$label->set($what?"o yes, it is!":"O no, it isn't!");
			Gtk::Gdk->threads_leave();
		}
		
	}
}