c – 如何使此功能线程安全快速?
发布时间:2020-12-16 05:48:12 所属栏目:百科 来源:网络整理
导读:int f(int); 多个线程可以调用此函数. 该函数应该返回 argument * argument_used_in_first_call_to_function 我编码如下.即使它是线程安全的,它不快,因为它使用互斥锁定/解锁.在线程安全的同时还有更快的解决方案吗? mutex mut1;int f(int x){ pthread_mute
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 Studio 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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |