我只想实现如下代码。
QString Class1::getNonce()
{
//if some thread is getting nonce wait here until it finishes the its own job.
mutex.lock();
QString nonce=QString("%1").arg(QDateTime::currentDateTime().toTime_t());
mutex.unlock();
return nonce;
}
即使我用互斥锁编写不同的线程也得到相同的随机数。我怎么解决这个问题? 感谢。
答案 0 :(得分:2)
为你的随机数使用原子计数器:
QString Class1::getNonce()
{
static std::atomic<unsigned long long> counter;
return QString::number(counter++);
}
答案 1 :(得分:2)
我更喜欢使用QMutexLocker
。
Class1::Class1()
{
m_mutex = new QMutex();
}
QString Class1::getNonce()
{
static int counter = 0;
QMutexLocker locker(m_mutex);
counter++;
return QString::number(counter);
}
希望有所帮助。
答案 2 :(得分:1)
感谢您使用类似
的所有消息nonce=QDateTime::currentDateTime().toTime_t()+7500;
......
QString Class1::getNonce()
{
QElapsedTimer timer;
timer.start();
mutex.lock();
nonce+=timer.nsecsElapsed()/250;
mutex.unlock();
return QString("%1").arg(nonce);
}