Lua程序中带条件变量的分割故障

我编写了以下简单的Lua程序来测试使用Lua进行POSIX线程中的条件变量:

local pthread = require 'pthread'

local cond = pthread.cond()
local mutex = pthread.mutex()
local ready = false

first = pthread.new(
    function()
        print('开始第一个线程')
        mutex:lock()
        print('第一个线程获得锁')
        while not ready do
            cond:wait(mutex)
        end
        mutex:unlock()
        print('第一个线程继续')
    end
)

second = pthread.new(
    function()
        print('开始第二个线程')
        mutex:lock()
        print('第二个线程获得锁')
        ready = true
        cond:signal()
        mutex:unlock()
        print('第二个线程继续')
    end
)

first:join()
second:join()

mutex:free()
cond:free()

在Ubuntu Trusty的luajit 2.1.0-beta1下,它通常按预期运行,输出为:

$ luajit condition.lua
开始第一个线程
第一个线程获得锁
开始第二个线程
第二个线程获得锁
第二个线程继续
第一个线程继续

然而,有时(经常)会崩溃并出现分割故障。我做错了什么?

点赞