Lua多线程处理

本示例采用Lua5.3.4版本(没有在全局state中加锁,可能向_G变量插入元素时会有多线程问题,后续测试有问题再修改,先记录一下,只在lua_State中定义锁,是为了实现每条线程创建独立的对应的lua_State,防止多线程间全局锁互相等待)
1.修改lua_State结构体
src/lstate.h 修改global_State结构体,加上线程锁对象(用递归锁防止出现重复锁问题):

 pthread_mutexattr_t lock_attr_;
 pthread_mutex_t lock;

2.初始化锁对象
src/lstate.c 修改函数preinit_thread末尾添加锁对象初始化代码:

  pthread_mutexattr_init(&g->lock_attr_);
  pthread_mutexattr_settype(&g->lock_attr_, PTHREAD_MUTEX_RECURSIVE);
  pthread_mutex_init(&g->lock, NULL);

3.释构锁对象
src/lstate.c 修改函数close_state,在freestack(L);语句后面添加如下代码:

  lua_unlock(L);
  pthread_mutex_destroy(&g->lock);

4.修改lua_lock和lua_unlock宏
src/llimits.h修改lua_lock和lua_unlock宏:

#define lua_lock(L) pthread_mutex_lock(&(G(L)->lock));
#define lua_unlock(L) pthread_mutex_unlock(&(G(L)->lock));

5.修改完lua的源码后,编译lua源码(在centos系统环境下编译):
make linux
make linux install
编译完成后,会在/usr/local/include下存放相关的头文件,在/usr/local/lib下存放liblua.a库文件

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好的兆头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值