小编som*_*one的帖子

在多线程环境中从STL Map读取/写入

问题:我需要编写一个函数,该函数从地图返回输入键的值.如果函数找不到map中的值,它将从数据库中获取值,写入map以供将来使用并返回相同的值.可以有多个线程调用此函数.

我正在考虑这条线:

string GetData (const int key)
{

    pthread_rwlock_rdlock(&rwlock); //read lock
    string result = "not found";
    my_map::const_iterator iter = m.find(key);
    if ( iter != m.end() )//found
    {
       result = iter->second;
    }
    else //missing
    {
        pthread_rwlock_wrlock(&rwlock); // write lock
        //fetch value from data base


        //if successful, add to the map
          m[key] = "missing data";
          result = "missing data";
     pthread_rwlock_unlock(&rwlock); // unlock write lock
    }
    pthread_rwlock_unlock(&rwlock); // unlock read lock
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这个功能线程安全吗?两个或多个线程是否有可能在写锁定时排队并从数据库中查询相同的密钥?如果是,我该如何避免这种情况?

c++ multithreading stl pthreads

1
推荐指数
1
解决办法
3838
查看次数

标签 统计

c++ ×1

multithreading ×1

pthreads ×1

stl ×1