저는 MacOS와 Linux에서 잘 돌아가며 mingw로 Windows로 크로스 컴파일하는 프로그램을 가지고 있습니다. 최근에 프로그램을 멀티 스레드로 만들었습니다.메인 스레드에서 alloc()을 수행하고 다른 스레드에서 free()를 수행 할 수 있습니까?
프로그램의 현재 디자인은 주 스레드에서 할당 된 메모리를 가지며 슬레이브 "worker"스레드에서 해제됩니다. malloc/free 시스템이 멀티 스레드이므로 MacOS 및 Linux에서는 문제가되지 않습니다.
그러나 크로스 컴파일에 대해 우려하고 있습니다. 내가 사용하고있는 mingw의 버전은 MacOS 포트에서 만들어졌습니다. 그것은 2004 년부터 G ++ (3.4.5 버전)의 아주 오래된 버전입니다. 나는 더 최근 버전을 만들기위한 시도에서 실패했습니다. (저는 64 비트 버전을 만들고 싶습니다.하지만 포기했습니다.) 나는 http://sourceware.org/pthreads-win32에서 pthreads를 얻고 있습니다.
내 관심사는 3.4.5의 malloc & 무료 시스템이 멀티 스레드가 아닙니다.
질문 : 메모리 블록이 해제 될 메인 스레드에 다시 전달 해방 될 수 있도록
내가 내 프로그램을 다시 작성해야 하는가?
더 최근의 윙으로 업그레이드해야합니까?
방대한 양의 테스트 이외에 이러한 동시성 문제를 찾는 방법이 있습니까? 그것은 저에게 좋은 느낌이 들지 않습니다.
고마워요!
그래서 되돌아 보면 옵션 # 1이 작동하지 않는다고 결론을 냈습니다. 왜냐하면 malloc() 및 free()가 호출되어야하는 스레드에는 다른 많은 경우가 있기 때문입니다. 나는 각 스레드에게 자신의 메모리 할당자를 줄 수는 있지만 잘못된 방향이다. – vy32