Android和IOS的TLS问题
#if defined(THREAD_TLS_ENABLED) && 1 == THREAD_TLS_ENABLED
namespace util {
namespace log {
namespace detail {
char *get_log_tls_buffer() {
static THREAD_TLS char ret[LOG_WRAPPER_MAX_SIZE_PER_LINE];
return ret;
}
}
}
}
#else
#include <pthread.h>
namespace util {
namespace log {
namespace detail {
static pthread_once_t gt_get_log_tls_once = PTHREAD_ONCE_INIT;
static pthread_key_t gt_get_log_tls_key;
static void dtor_pthread_get_log_tls(void *p) {
char *buffer_block = reinterpret_cast<char *>(p);
if (NULL != buffer_block) {
delete[] buffer_block;
}
}
static void init_pthread_get_log_tls() { (void)pthread_key_create(>_get_log_tls_key, dtor_pthread_get_log_tls); }
char *get_log_tls_buffer() {
(void)pthread_once(>_get_log_tls_once, init_pthread_get_log_tls);
char *buffer_block = reinterpret_cast<char *>(pthread_getspecific(gt_get_log_tls_key));
if (NULL == buffer_block) {
buffer_block = new char[LOG_WRAPPER_MAX_SIZE_PER_LINE];
pthread_setspecific(gt_get_log_tls_key, buffer_block);
}
return buffer_block;
}
}
}
}
#endif
// 然后后面需要用缓冲区的时候用get_log_tls_buffer()函数获取Last updated
Was this helpful?