int ngx_shmap_inc_double(ngx_shm_zone_t* zone, ngx_str_t* key,double d,uint32_t exptime,double* ret) { ngx_int_t rc = 0; ngx_str_t data = ngx_null_string; assert(zone != NULL); assert(key != NULL); assert(ret != NULL); uint8_t value_type = VT_DOUBLE; rc = ngx_shmap_get(zone, key, &data, &value_type, NULL,NULL); if(rc == 0){ if(value_type != VT_DOUBLE){ //NLOG_ERROR("key [%V] value_type [%d] invalid!",key, value_type); return -1; } double* p = (double*)data.data; //要改成原子操作 *ret = (*p += d); }else{ //不存在,插入新的 ngx_str_set_double(&data, &d); rc =ngx_shmap_set(zone, key, &data, value_type, exptime,0); if(rc == 0){ *ret = d; } } return rc; }
void ngx_str_handler_set_double(ngx_str_t* key, double* value) { ngx_str_set_double(key,value); }