在多线程中怎样安全可靠地创建和使用内存?解决方法
在多线程中怎样安全可靠地创建和使用内存?
我在多线程中动态创建一个内存,同时创建了一个响应频率很高的Timer(不是用Windows的,是RTX的),并在Timer中更新这个内存的值。
如果只运行一两次,没有问题,可在运行几次以后,就会在释放内存的地方崩溃,请问一般是什么原因造成的?
程序大致流程如下:
------解决方案--------------------
非实际代码贴是没有意义的,因为如果你能理解中间可能出现问题的地方,你就不会来问了,如果你不理解,那么贴的代码和问题可能无关,忽略了导致问题的地方
最常见的问题,不同线程访问同一个对象(包括new出来的对象)而不进行并发控制。这个很多多线程编程的书上都有讲
我在多线程中动态创建一个内存,同时创建了一个响应频率很高的Timer(不是用Windows的,是RTX的),并在Timer中更新这个内存的值。
如果只运行一两次,没有问题,可在运行几次以后,就会在释放内存的地方崩溃,请问一般是什么原因造成的?
程序大致流程如下:
- C/C++ code
void BtRun()//点击按钮运行一次 { CreateThread(NULL,0,ThreadRtx,NULL,0,NULL);//创建多线程 } DWORD WINAPI ThreadRtx( LPVOID lpParameter ) //多线程程序 { float *RTval=(float *)malloc( sizeof(double) * nTime ); //在多线程内动态创建内存 //创建一个运行在多线程上的Timer HANDLE hTimer = RtCreateTimer( NULL, // security 0, // stack size - 0 uses default TimerHandler, // timer handler (PVOID)RTval, // NULL context (argument to handler) RT_PRIORITY_MAX, // priority CLOCK_2) )); // RTX HAL timer Sleep(5000);//让Timer运行5秒 RtDeleteTimer(hTimer);//结束Timer RtCloseHandle(hTimer); free(RTval); //======运行几次后就是在这个地方出错!!====== ExitThread(0); return 1; } void RTFCNDCL TimerHandler(PVOID context) //rtx 中断响应 { static int num=0; float *RTval=(float *)(context); RTval[num++]=12345.0f; }
------解决方案--------------------
非实际代码贴是没有意义的,因为如果你能理解中间可能出现问题的地方,你就不会来问了,如果你不理解,那么贴的代码和问题可能无关,忽略了导致问题的地方
最常见的问题,不同线程访问同一个对象(包括new出来的对象)而不进行并发控制。这个很多多线程编程的书上都有讲