linux localtime 线程安全,关于多线程: 标准C函数'Localtime'的线程安全版本
我在多线程应用程序中使用本地时间
我必须用一个线程安全的版本来替换它,我知道这个版本叫做Localtime
但是,在执行此操作时,由于链接失败,我无法完成生成
我甚至不知道从哪里开始寻找解决方案
我的系统组件是:
我假设(虽然我不确定)这个功能通常可以在IDE提供的标准库中使用. 我说得对吗?
我需要向项目中添加另一个库,还是需要在项目设置中包含另一个库?
如果无法将此函数“导入”到我的代码中,那么对于Localtime函数的线程安全版本,我还有哪些其他选项?
更新:
我不想使用操作系统资源(即互斥锁),而是希望调用一个标准例程,该例程完全执行“Localtime”操作,但不使用它使用的静态结构(使其线程不安全)
我看不出本地时间使用静态结构作为起点的任何原因,因此我假设相应的本地时间不会使用任何操作系统资源来解决它,而只是限制静态结构的使用
如果没有这样的选择是可行的localtime 线程安全,那么我最好自己去实现,因为约会系统的“不规则性”,只有我更喜欢使用经过适当测试的东西
这里的问题是如何更改本地时间到我的项目的链接(而不是如何实现本地时间)
谢谢你
您需要为线程安全的Localtime()创建自己的包装器,该包装器基本上是实现Localtime\r()
例如
静态发送互斥锁
作废我的本地时间初始化(void)
{
tx_uux_uu创建(&;localtime_ulock,“localtime_ulock”,tx_uinherit)
}
struct tm*my_uulocaltime_uur(常量时间tim,struct tm*结果)
{
结构tm*t
tx_uux_uu-get(本地时间锁定,tx_u-WAIT_u-FOREVER)
t=本地时间(tim)
如果(t)
*结果=*t
发送互斥锁(本地时间锁定)
返回t?结果: 空
}
你需要在启动时打电话给我
这也意味着您需要使用my_uuLocalTime_ur函数替换所有地方的所有调用. 没有人可以直接调用Localtime(),因为这可能是通过调用新的mylocaltime的代码来实现的,这会导致竞争局面
如果线程安全版本不可用,则必须创建一个带有R()的版本,但必须使用互斥锁来确保它们是可用的. 我可能使用相同的名称,但有些参数总是使用您经常调用的备用名称,如果可用,它将直接调用Localtime
此外,如果您的系统使用的互斥量不同于pthread互斥量localtime 线程安全,则会出现这种情况;请使用本机互斥量而不是pthread互斥量
静态pthread_uux_uux_uux_uux_uulocaltime_ur=pthread_uumutex_u初始化器
struct tm*localtime_ur(const time_ut*restrict timer,struct tm*restrict结果)
{
结构tm*r=0
if(pthread_uuumutex_u锁定(&mx_uulocaltime_ur)==0)
{
r=本地时间(计时器)
如果(r!=0)
{
*结果=*r
r=结果
}
如果(pthread_uuumutex_u解锁(&mx_ulocaltime_ur)!=0)
r=0
}
返回r
}
不是无编译的测试
如果互斥锁的默认属性不适合您,则需要更大的努力才能正确初始化互斥锁
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-217806-1.html
linux localtime 线程安全,关于多线程: 标准C函数'Localtime'的线程安全版本相关推荐
- .NET异步和多线程系列(四)- 多线程异常处理、线程取消、多线程的临时变量问题、线程安全和锁lock
本文是.NET异步和多线程系列第四章,主要介绍的是多线程异常处理.线程取消.多线程的临时变量问题.线程安全和锁lock等. 一.多线程异常处理 多线程里面抛出的异常,会终结当前线程,但是不会影响别的线 ...
- 线程基础,多线程架构,高并发,线程安全基础知识
线程基础,多线程架构,高并发,线程安全基础知识 线程基础 一.线程安全 1.1概念:当多个线程访问某一个类(对象或者方法)时,这个类始终都能表现出正确额行为,那么这个类(对象或者方法)就是线程安全的. ...
- 线程安全list_多线程开发之如何创建一个线程安全的类
上一篇讨论了如何解决线程安全的问题,今天总结如何设计一个线程安全的类: 创建线程安全类的关注点 一个类要想线程安全,除了上一篇文章通过外部解决方式外,还可以通过合理的设计类的内部来解决,使类本身就线程 ...
- python线程创建对象_Python多线程编程基础:如何创建线程?
Python标准库threading中的Thread类用来创建和管理线程对象,支持使用两种方法来创建线程: 1)直接使用Thread类实例化一个线程对象并传递一个可调用对象作为参数: 2)继承Thre ...
- java 线程起名字_java多线程学习三::::为什么要给线程起名字并且知道守护作用?...
为什么要会线程起名字呢? 你如果拿到一连串的Thread-01,Thead-02我想你应该会疯掉,看以下代码 package rs.thread.day0504; /** * @auther rs * ...
- python以追加方式打开文件 线程安全吗,Python的open函数文件读写线程不安全,logging模型文件读写线程安全!...
工作中遇到的问题:如何在多线程的程序中同时记录日志? 最初图省事,使用了最原始的open函数来写日志,因为开始使用的写文件模式的是追加('a'),发现并没有线程不安全的现象,各个线程的的日志信息都写入 ...
- 【C/C++多线程编程之三】创建pthread线程
多线程编程之创建pthread线程 Pthread是 POSIX threads 的简称,是POSIX的线程标准. 创建线程是多线程编程的第一步,理解线程创建时多线程编程的关键. ...
- C#多线程学习(二) 如何操纵一个线程
C#多线程学习(二) 如何操纵一个线程 原文链接:http://kb.cnblogs.com/page/42529/ [1] C#多线程学习(二) 如何操纵一个线程 [2] C#多线程学习(二) 如何 ...
- 王道操作系统考研笔记——2.1.5 线程概念与多线程模型
文章目录 2.1.5 线程概念与多线程模型 2.1.5.1 线程的来源 2.1.5.2 线程机制带来的变化 2.1.5.3 线程的属性 2.1.5.4 线程的实现方式 2.1.5.5 多线程模型 2. ...
最新文章
- vue 引用 vue-resource步骤 (遇错排解)
- JavaSE——类集(下)(Set、Comparable、Collections、Comparator、Map)
- FPGA实现低高速接口更新说明
- 初学者python笔记(内置函数_2)
- java spring server_java server之spring中的IOC如何用java实现?
- Java Web开发流程
- 苹果手用计算机解锁手机密码,苹果手机忘记密码怎样打开 苹果手机解锁常用方法分享...
- 计算机类毕业设计评语导师评语,毕业设计导师评语
- 浅析智慧消防应用中多设备联动火灾报警系统
- Hadoop与spark性能比较试验
- Linux那些事儿之我是U盘(5)外面的世界很精彩
- 工业相机参数之帧率相关知识详解:
- Oracle怎么安装
- TextCNN——基于卷积神经网络的文本分类学习
- uniapp vue3版本 引用color-ui的cu-custom组件问题
- JDBC 学习笔记3
- Oracle高级函数:rank over partition by
- 1.2 pyenv使用
- SQL Server 2012 修改数据库属性
- dp光纤线与hdmi光纤线哪个比较好?