首页 > 在ATS插件中使用互斥锁

在ATS插件中使用互斥锁

有时候因为业务需要,对某些非线程函数,比如mktime,需要使用互斥锁,可以参照example/blacklist-1或者channel_stats里面的用法

首先插件顶部声明

static TSMutex sites_mutex;

在TSPluginInit()中初始化

sites_mutex = TSMutexCreate();

在需要使用的地方,加锁和解锁

TSMutexLock(sites_mutex)



TSMutexLockTry(sites_mutex)

TSMutexUnlock(sites_mutex);

在哪里销毁?

会在该插件范围内永远使用,没有机会销毁,除非服务器退出,因为是静态的,创建对象不多,不好造成大的内存泄露



在channel_stats.cc搜索stats_map_mutex可以得到下面的调用位置



参考文献

[1].https://issues.apache.org/jira/browse/TS-3561

更多相关:

  • 在编写ATS插件的过程中,发现使用mktime会偶尔出现段错误, 经过网上调研,发现mktime等函数不是线程安全的, 于是编写下面的代码进行测试. 注意加锁和不加锁区别很大, 在mktime中使用多线程, 加上互斥锁就没有问题. //gcc -g mktime_multithread.c -o mktime_multithr...

  • 文章目录描述成员函数总结 描述 头文件 使用 std::mutex 简介 mutex是一种多线程变成中的同步原语,它能够让共享数据不被多个线程同时访问,它不支持递归得对互斥对象上锁特点 用方线程从它成功调用 lock 或 try_lock 开始,到它调用 unlock 为止占有 mutex线...