Code Monkey home page Code Monkey logo

shmqueue's People

Contributors

dguco avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

shmqueue's Issues

多个生产者一个消费者的时候,如果生产者动态加入会导致消费者读到的数据异常,请看下。

你好,大神
我用您这个方法测试多进程通讯的时候发现了一个问题:
在多生产者,一个消费者的时候:比如原来一个生产者和一个消费者正在通讯(生产者每次生产+1的整数数据,生产者生产的快,消费者消费的慢),如果中途有一个新的生产者进程加入但是不生产,将会覆盖掉共享内存已有的数据,导致消费者读到的数据发生跳变。
如下,写了一个例程,消费者读的数据在新生产者创建时刻发生了跳变。
如图从34跳变到1294
image

通过代码发现可能是在每次创建新的生产者进程的时候都会调用
CMessageQueue::CreateInstance(SHAR_KEY_1, 10240, eQueueModel::ONE_READ_MUL_WRITE);
thread write_thread(remote_write_func, messQueue, 1, "remoteWrite");
进而调用
CMessageQueue::CMessageQueue(BYTE pCurrAddr, eQueueModel module, key_t shmKey, int shmId, size_t size)
{
m_pShm = (void
) pCurrAddr;
m_pQueueAddr = pCurrAddr;
m_stMemTrunk = new (m_pQueueAddr) stMemTrunk();
m_pQueueAddr += sizeof(stMemTrunk);
m_stMemTrunk->m_iBegin = 0;
m_stMemTrunk->m_iEnd = 0;
m_stMemTrunk->m_iShmKey = shmKey;
m_stMemTrunk->m_iShmId = shmId;
m_stMemTrunk->m_iSize = (unsigned int)size;
m_stMemTrunk->m_eQueueModule = module;
InitLock();
}
此处将重置m_stMemTrunk->m_iBegin = 0; 和 m_stMemTrunk->m_iEnd = 0;
从而新创建进程的时候共享内存读写指针发生了重置,导致原本消费者未读的数据就没读到。
是这样的吗,我顺便向您的邮箱发了下我的测试代码,
您有空可以看下能帮忙解决下吗。
多谢

交叉编译问题

我在pc上运行没有问题,但是交叉编译会发生如下错误
arm-openwrt-linux-gnueabi-g++.bin: warning: environment variable 'STAGING_DIR' not defined
/tmp/cck7LQDM.s: Assembler messages:
/tmp/cck7LQDM.s:249: Error: bad instruction sfence' /tmp/cck7LQDM.s:759: Error: bad instruction sfence'
CMakeFiles/shmqueue.dir/build.make:62: recipe for target 'CMakeFiles/shmqueue.dir/shmmqueue.cpp.o' failed
make[2]: *** [CMakeFiles/shmqueue.dir/shmmqueue.cpp.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/shmqueue.dir/all' failed
make[1]: *** [CMakeFiles/shmqueue.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.