Se non si scrive su di essi, non è necessario occuparsi delle condizioni di sincronizzazione/gara.
Basta aprire il file con lettura condivisa come maniglie diverse e tutto funzionerebbe. (Ad esempio, è necessario aprire il file nel contesto del thread anziché condividere lo stesso handle di file).
#include <stdio.h>
#include <windows.h>
DWORD WINAPI mythread(LPVOID param)
{
int i = (int) param;
BYTE buf[1000];
DWORD numread;
HANDLE h = CreateFile("c:\\test.txt", GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, 0, NULL);
SetFilePointer(h, i * 1000, NULL, FILE_BEGIN);
ReadFile(h, buf, sizeof(buf), &numread, NULL);
printf("buf[%d]: %02X %02X %02X\n", i+1, buf[0], buf[1], buf[2]);
return 0;
}
int main()
{
int i;
HANDLE h[4];
for (i = 0; i < 4; i++)
h[i] = CreateThread(NULL, 0, mythread, (LPVOID)i, 0, NULL);
// for (i = 0; i < 4; i++) WaitForSingleObject(h[i], INFINITE);
WaitForMultipleObjects(4, h, TRUE, INFINITE);
return 0;
}
Suona come i compiti. Quale libreria di threading usi? Dove sei rimasto bloccato? – dirkgently
non è un compito, amico, voglio solo sapere se è possibile o no. non so nemmeno come farlo, dato che la maggior parte della soluzione pubblicata su google non sembra un vero file di accesso parallelo, tutti usano i blocchi – anru