1.定义互斥量: pthread_mutex_t mutex; 2.初始化互斥量: pthread_mutex_init(&mutex, NULL); //第二个参数不研究置NULL; //初始化为 1 (仅做记忆) 3.上锁 pthread_mutex_lock(&mutex); 1->0; 0 等待 4.解锁 pthread_mutex_unlock(&mutex); 置1 返回 ...
上面的代码真实的揭露了QMutex的无力,因为只要有mutex.lock(),必然要有mutex.unlock(),否则临界区里的资源将再不能被访问;而上面的代码并不能保证QMutex的对象一定会unlock(代码可能从某个地方就走了,再不回来了)。这个时候QMutexLocker就发挥用处了,因为QMutexLocker一定是以函数内部的局部变量的形式出现的,当它...
int n = sprintf(zubao,"loadfile ../song/%s\n",song_array[songdijishou]); // pthread_mutex_lock(&mutex); write(fifo_fd,zubao,n); // pthread_mutex_unlock(&mutex); write(fifo_fd,"get_time_length\n",strlen("get_time_length\n")); // write(fifo_fd,"get_time_pos\n",strlen(...
上面的代码真实的揭露了QMutex的无力,因为只要有mutex.lock(),必然要有mutex.unlock(),否则临界区里的资源将再不能被访问;而上面的代码并不能保证QMutex的对象一定会unlock(代码可能从某个地方就走了,再不回来了)。这个时候QMutexLocker就发挥用处了,因为QMutexLocker一定是以函数内部的局部变量的形式出现的,当它...
pthread_mutex_lock(&sharedMutex); /*进入临界区*/ data = sharedArray[curr]; position = curr--; printf ("%s read from the %dth: %d, \n", (char*)whichone, position, data); sem_post(&waitNonFull); /*生成一个"非满资源"*/
QMutexLocker locker(&m_lock);// 此处加锁,防止访问冲突 if(!m_isCanRun)//在每次循环判断是否可以运行,如果不行就退出循环 { return; } } } } 因此在子线程的run函数的循环中遇到m_isCanRun的判断后就会退出run函数,继承QThread的函数在运行完run函数后就视为线程完成,会发射finish信号。
void Widget::on_le_writeNum_returnPressed(){ int status; status = pthread_mutex_lock (&mp_processThread->m_structCondition.mutex);if (status != 0) err_abort (status, "Lock mutex"); QString num = ui->le_writeNum->text(); mp_processThread->queuePushData(num.toInt()); status = ...
pthread_mutex_lock(&sharedMutex); /*进入临界区*/ position = ++curr; sharedArray[curr]=data; printf ("%s wrote to the %dth: %d, /n", (char*)whichone, position, data); sem_post(&waitNonEmpty); /*生成一个"非空资源"*/ pthread_mutex_unlock(&sharedMutex); /*离开临界区*/ ...
pthread_mutex_lock(&sharedMutex); /*进入临界区*/ data = sharedArray[curr]; position = curr–; printf (“%s read from the %dth: %d, \n”, (char*)whichone, position, data); sem_post(&waitNonFull); /*生成一个”非满资源”*/ ...
18、ull; /*等待”非空资源”和等待”非满资源”的semaphor*/void * readData(void * whichone) int data, position; while (1) sem_wait(&waitNonEmpty); /*是否有”非空资源”*/ pthread_mutex_lock(&sharedMutex); /*进入临界区*/ data = sharedArraycurr; position = curr; printf (“%s read ...