本文整理汇总了C++中SharedMemory::unlock方法的典型用法代码示例。如果您正苦于以下问题:C++ SharedMemory::unlock方法的具体用法?C++ SharedMemory::unlock怎么用?C++ SharedMemory::unlock使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SharedMemory
的用法示例。
在下文中一共展示了SharedMemory::unlock方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SharedMemory
void
do_child(unsigned int child_id, QASharedMemoryHeader *header)
{
cout << "Child " << child_id << " is alive" << endl;
// This will attach to the existing shmem segment,
// use ipcs to check
SharedMemory *sr = new SharedMemory(MAGIC_TOKEN, header,
/* read only */ false,
/* create */ false,
/* destroy */ false);
int *mc = (int *)sr->memptr();
cout << "Child " << child_id << " entering loop" << endl;
while ( ! quit ) {
int m;
m = mc[1]; m++;
//cout << "Child: sleeping" << endl;
usleep(12932);
//cout << "Child: wasting time" << endl;
WASTETIME;
//cout << "Child: done wasting time, setting to " << m << endl;
// mc[1] = m;
cout << "Child " << child_id << ": locking (read)" << endl;
sr->lock_for_read();
cout << "Child " << child_id << ": locked (read)" << endl;
m = mc[0]; m++;
usleep(23419);
WASTETIME;
cout << "Child " << child_id << ": unlocking (read)" << endl;
sr->unlock();
cout << "Child " << child_id << ": locking (write)" << endl;
sr->lock_for_write();
cout << "Child " << child_id << ": locked (write)" << endl;
mc[0] = m;
cout << "Child " << child_id << ": unlocking (write)" << endl;
sr->unlock();
//cout << "Child: unlocked" << endl;
// std::cout << "Child " << child_id << ": unprotected: " << mc[1] << " protected: " << mc[0] << endl;
usleep(1231);
}
cout << "Child " << child_id << " exiting" << endl;
delete sr;
}
示例2: signal
int
main(int argc, char **argv)
{
quit = false;
signal(SIGINT, signal_handler);
QASharedMemoryHeader *h1 = new QASharedMemoryHeader(1);
SharedMemory *sw;
cout << "Use the locking/locked comments to verify!" << endl;
try {
cout << "Creating shared memory segment" << endl;
// This will create the shared memory segment
sw = new SharedMemory(MAGIC_TOKEN, h1,
/* read only */ false,
/* create */ true,
/* destroy */ true);
// Add protection via semaphore
cout << "Adding semaphore set for protection" << endl;
sw->add_semaphore();
} catch ( ShmCouldNotAttachException &e ) {
e.print_trace();
exit(1);
}
pid_t child_pid;
if ((child_pid = fork()) == 0) {
// child == reader
do_child(1, h1);
} else {
if ((child_pid = fork()) == 0) {
// child == reader
do_child(2, h1);
} else {
// father
cout << "Father (Writer) is alive" << endl;
int *mf = (int *)sw->memptr();
while ( ! quit ) {
int m;
m = mf[1]; m++;
usleep(34572);
WASTETIME;
mf[1] = m;
cout << "Father: locking" << endl;
sw->lock_for_write();
cout << "Father: locked" << endl;
m = mf[0]; m++;
usleep(12953);
WASTETIME;
mf[0] = m;
sw->unlock();
std::cout << "Father: unprotected: " << mf[1] << " protected: " << mf[0] << endl;
usleep(3453);
}
cout << "Father: Waiting for child to exit" << endl;
int status;
waitpid(child_pid, &status, 0);
delete sw;
delete h1;
}
}
}