多线程

多线程是允许程序中同时处理多个任务,是函数的并发执行。

创建线程
创建线程采用内置函数_createthread(function, a...),第一个参数为线程函数的名称(句柄),后面为线程函数的参数,
创建线程成功后,线程即刻运行,线程函数执行完毕,线程将被自动释放:
func threadTest(a,b) //线程函数
{
    print(a,b);
}
main()
{
    x=100;
    y="good";
    _createthread(threadTest,x,y); //创建线程并运行
    f=threadTest; //函数名赋值给f,f为句柄类型
    for(i=0;i<10;i++)//创建10个线程并运行
        _createthread(f,i,"test");
    _input();//pause,暂停一下,不然可能线程还没有运行,这里程序已经执行完毕而退出了
}

由于线程是并发同时执行,不保证顺序,后创建的线程可能先执行,上面程序执行后打印的结果是无序的。
为了保证线程的同步和对共享资源访问的互斥,需要通过创建锁来进行控制。
创建锁通过_createlock()函数,上锁通过_lock()函数,解锁通过_unlock()函数:
_count=0;
func threadTest(i,lock) //线程函数
{
    global _count;
    _lock(lock); //在更新共享资源_count前上锁,则其它线程将无法更改_count
   
    _count++;
    print("id:",i,"count:",_count);
   
    _unlock(lock); //更新完毕,释放锁, 其它线程可继续更改_count
}
main()
{
    lock=_createlock();
    for(i=0;i<10;i++)
        _createthread(threadTest,i,lock);
    _input();//pause
}


上面程序将会保证对共享资源_count的正确更新,输出的_count将是有序的,结果如下列形式:
id: 0 count: 1
id: 1 count: 2
id: 3 count: 3
id: 2 count: 4
id: 4 count: 5
id: 6 count: 6
id: 7 count: 7
id: 8 count: 8
id: 9 count: 9
id: 5 count: 10