我在多线程应用程序中使用本地时间

我必须用一个线程安全的版本来替换它,我知道这个版本叫做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'的线程安全版本相关推荐

  1. .NET异步和多线程系列(四)- 多线程异常处理、线程取消、多线程的临时变量问题、线程安全和锁lock

    本文是.NET异步和多线程系列第四章,主要介绍的是多线程异常处理.线程取消.多线程的临时变量问题.线程安全和锁lock等. 一.多线程异常处理 多线程里面抛出的异常,会终结当前线程,但是不会影响别的线 ...

  2. 线程基础,多线程架构,高并发,线程安全基础知识

    线程基础,多线程架构,高并发,线程安全基础知识 线程基础 一.线程安全 1.1概念:当多个线程访问某一个类(对象或者方法)时,这个类始终都能表现出正确额行为,那么这个类(对象或者方法)就是线程安全的. ...

  3. 线程安全list_多线程开发之如何创建一个线程安全的类

    上一篇讨论了如何解决线程安全的问题,今天总结如何设计一个线程安全的类: 创建线程安全类的关注点 一个类要想线程安全,除了上一篇文章通过外部解决方式外,还可以通过合理的设计类的内部来解决,使类本身就线程 ...

  4. python线程创建对象_Python多线程编程基础:如何创建线程?

    Python标准库threading中的Thread类用来创建和管理线程对象,支持使用两种方法来创建线程: 1)直接使用Thread类实例化一个线程对象并传递一个可调用对象作为参数: 2)继承Thre ...

  5. java 线程起名字_java多线程学习三::::为什么要给线程起名字并且知道守护作用?...

    为什么要会线程起名字呢? 你如果拿到一连串的Thread-01,Thead-02我想你应该会疯掉,看以下代码 package rs.thread.day0504; /** * @auther rs * ...

  6. python以追加方式打开文件 线程安全吗,Python的open函数文件读写线程不安全,logging模型文件读写线程安全!...

    工作中遇到的问题:如何在多线程的程序中同时记录日志? 最初图省事,使用了最原始的open函数来写日志,因为开始使用的写文件模式的是追加('a'),发现并没有线程不安全的现象,各个线程的的日志信息都写入 ...

  7. 【C/C++多线程编程之三】创建pthread线程

    多线程编程之创建pthread线程 Pthread是 POSIX threads 的简称,是POSIX的线程标准.           创建线程是多线程编程的第一步,理解线程创建时多线程编程的关键. ...

  8. C#多线程学习(二) 如何操纵一个线程

    C#多线程学习(二) 如何操纵一个线程 原文链接:http://kb.cnblogs.com/page/42529/ [1] C#多线程学习(二) 如何操纵一个线程 [2] C#多线程学习(二) 如何 ...

  9. 王道操作系统考研笔记——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. ...

最新文章

  1. vue 引用 vue-resource步骤 (遇错排解)
  2. JavaSE——类集(下)(Set、Comparable、Collections、Comparator、Map)
  3. FPGA实现低高速接口更新说明
  4. 初学者python笔记(内置函数_2)
  5. java spring server_java server之spring中的IOC如何用java实现?
  6. Java Web开发流程
  7. 苹果手用计算机解锁手机密码,苹果手机忘记密码怎样打开 苹果手机解锁常用方法分享...
  8. 计算机类毕业设计评语导师评语,毕业设计导师评语
  9. 浅析智慧消防应用中多设备联动火灾报警系统
  10. Hadoop与spark性能比较试验
  11. Linux那些事儿之我是U盘(5)外面的世界很精彩
  12. 工业相机参数之帧率相关知识详解:
  13. Oracle怎么安装
  14. TextCNN——基于卷积神经网络的文本分类学习
  15. uniapp vue3版本 引用color-ui的cu-custom组件问题
  16. JDBC 学习笔记3
  17. Oracle高级函数:rank over partition by
  18. 1.2 pyenv使用
  19. SQL Server 2012 修改数据库属性
  20. dp光纤线与hdmi光纤线哪个比较好?

热门文章

  1. yum安装openJDK1.7
  2. 超详细如何配置IPv6
  3. js冒泡排序的四种方法
  4. JavaScript算法——冒泡排序
  5. Linux学习笔记14 ——execl
  6. 内存分析利器purify简介
  7. 支付宝是如何在年账单里坑你的?
  8. 学习Python Day2
  9. manuscript手稿格式准备
  10. oracle数据库管理题库,oracle数据库题库