前端之家收集整理的这篇文章主要介绍了
c – 如何使此功能线程安全快速?,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
int f(int);
多个线程可以调用此函数.
该函数应该返回
argument * argument_used_in_first_call_to_function
我编码如下.即使它是线程安全的,它不快,因为它使用互斥锁定/解锁.在线程安全的同时还有更快的解决方案吗?
mutex mut1;
int f(int x)
{
pthread_mutex_lock(mut1);
static bool first_init = true;
static int first_arg = 0;
if (first_init)
{
first_arg = x;
first_init = false;
}
pthread_mutex_unlock(mut1);
return x * first_arg;
}
如果您的编译器
支持麦克的魔术静态答案是最好的.如果您在Visual Stu
dio 2013上,最好的
方法是使用std :: call_once,而不是
自定义标志和互斥体.
#include <mutex>
namespace {
std::once_flag fFirstCallFlag;
}
int f(int arg) {
static int firstValue;
std::call_once(fFirstCallFlag,[&firstValue,arg] { firstValue = arg; });
return firstValue * arg;
}
原文链接:https://www.f2er.com/c/113707.html