11
क्या सिंक्रनाइज़ेशन के लिए बाधा के बराबर एक क्यूटी बराबर है? वह प्रकार जहां पहले एन -1 कॉलर wait
ब्लॉक और एनटी कॉलर wait
पर सभी को रिलीज़ करने का कारण बनता है।क्यूटी सिंक्रनाइज़ेशन बाधा?
क्या सिंक्रनाइज़ेशन के लिए बाधा के बराबर एक क्यूटी बराबर है? वह प्रकार जहां पहले एन -1 कॉलर wait
ब्लॉक और एनटी कॉलर wait
पर सभी को रिलीज़ करने का कारण बनता है।क्यूटी सिंक्रनाइज़ेशन बाधा?
नहीं, लेकिन आपको QWaitCondition
इन बाधाओं को बनाने के लिए उपयोग कर सकते हैं:
#include <QMutex>
#include <QWaitCondition>
#include <QSharedPointer>
// Data "pimpl" class (not to be used directly)
class BarrierData
{
public:
BarrierData(int count) : count(count) {}
void wait() {
mutex.lock();
--count;
if (count > 0)
condition.wait(&mutex);
else
condition.wakeAll();
mutex.unlock();
}
private:
Q_DISABLE_COPY(BarrierData)
int count;
QMutex mutex;
QWaitCondition condition;
};
class Barrier {
public:
// Create a barrier that will wait for count threads
Barrier(int count) : d(new BarrierData(count)) {}
void wait() {
d->wait();
}
private:
QSharedPointer<BarrierData> d;
};
प्रयोग उदाहरण कोड:
class MyThread : public QThread {
public:
MyThread(Barrier barrier, QObject *parent = 0)
: QThread(parent), barrier(barrier) {}
void run() {
qDebug() << "thread blocked";
barrier.wait();
qDebug() << "thread released";
}
private:
Barrier barrier;
};
int main(int argc, char *argv[])
{
...
Barrier barrier(5);
for(int i=0; i < 5; ++i) {
MyThread * thread = new MyThread(barrier);
thread->start();
}
...
}
यह मेरा वैकल्पिक दृष्टिकोण था, लेकिन धन्यवाद, क्या आप मुझे कुछ कोडिंग सहेज लिया है। –
बहुत बाध्य, @alexisdm! बस एक नोट, 'बैरियरडाटा' कन्स्ट्रक्टर में, आप जिस पैरामीटर को कन्स्ट्रक्टर में पास करते हैं वह वैरिएबल के समान नाम है। –
@Adri: मुझे लगता है कि उद्देश्य पर था। यह पूरी तरह से कानूनी है और आपको मूर्ख सम्मेलनों का आविष्कार करने से बचाता है। –