
我在多线程应用程序中使用本地时间
我必须用一个线程安全的版本来替换它,我知道这个版本叫做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
你牛