关于通过共享内存实现多进程通信的有关问题
关于通过共享内存实现多进程通信的问题
通过共享循环缓冲区在进程间传输流媒体..
写进程互斥(这个无所谓 就一个写)
读和写互斥
读和读不互斥,并且读和读同步
个人写了一个,但是开两个读进程的时候画面帧数会很低 找了半天也没找到问题,可能是逻辑问题
在这里求大神能给个性能好的逻辑么
------解决方案--------------------
基于fastCSharp写了一个示例供参考
通过共享循环缓冲区在进程间传输流媒体..
写进程互斥(这个无所谓 就一个写)
读和写互斥
读和读不互斥,并且读和读同步
个人写了一个,但是开两个读进程的时候画面帧数会很低 找了半天也没找到问题,可能是逻辑问题
在这里求大神能给个性能好的逻辑么
------解决方案--------------------
基于fastCSharp写了一个示例供参考
unsafe class shareMemoryBase
{
internal const string shareMemoryName = "fastCSharp";
internal const int bufferSize = 1 << 20;
internal const int errorSize = int.MinValue;
protected fastCSharp.io.shareMemory shareMemory;
protected System.Threading.EventWaitHandle serverWait;
protected System.Threading.EventWaitHandle clientWait;
protected void dispose()
{
fastCSharp.pub.Dispose(ref shareMemory);
serverWait.Close();
clientWait.Close();
}
}
unsafe class server : shareMemoryBase
{
private byte[] buffer;
public unsafe server()
{
shareMemory = fastCSharp.io.shareMemory.Create(bufferSize + sizeof(int) * 6, shareMemoryName);
if (shareMemory != null)
{
fastCSharp.unsafer.memory.Fill(shareMemory.Buffer, 0U, 6);
buffer = new byte[bufferSize];
serverWait = new System.Threading.EventWaitHandle(false, System.Threading.EventResetMode.AutoReset, shareMemory.Name + "s");
clientWait = new System.Threading.EventWaitHandle(false, System.Threading.EventResetMode.ManualReset, shareMemory.Name + "c");
fastCSharp.threading.threadPool.TinyPool.Start(start);
}
}
private void start()
{
int* dataSizePoint = (int*)(shareMemory.Buffer + sizeof(int) * 4);
try
{
int* dataIndexPoint = (int*)(shareMemory.Buffer + sizeof(int) * 5);
byte* data = shareMemory.Buffer + sizeof(int) * 6;
fixed (byte* bufferFixed = buffer)
{
do
{
*dataIndexPoint += *dataSizePoint;