Problemas con socket.accept multiproceso
Bloquear subprocesos: hThread solo puede ser adquirido por un subproceso a la vez. Solo cuando el subproceso sale, otros subprocesos pueden adquirir y establecer conexiones. Este método es menos eficiente. sigue:
mientras(verdadero)
{
SOCKET hAccept = aceptar(ghSocket, 0, 0);
DWORD p;
HANDLE hThread;
//Aquí está el inicio de la zona crítica
getmutex();
hThread = CreateThread(0, 0 , (LPTHREAD_ START_ROUTINE)ServiceThread, (void*)hAccept, 0, amp; p);
wait() //Espera a que finalice el hilo
CloseHandle(hThread) ;
releasemutex();//Release<
}
Sin bloqueo: cada vez que se genera un nuevo hilo, insértelo en una tabla, mantenga la tabla y actualizar el tiempo comprueba el identificador en la tabla. Si el subproceso representado por el identificador ha finalizado, cierre el identificador para que el subproceso sea asincrónico y más eficiente
mientras (verdadero)
p>
{
SOCKET hAccept = aceptar(ghSocket, 0, 0);
DWORD p
HANDLE hThread; p>hThread = CreateThread( 0, 0, (LPTHREAD_START_ROUTINE) ServiceThread, (void*)hAccept, 0, amp; p);
if(!
table.push_back(hThread); );
//CloseHandle(hThread); Esto se usa cuando se verifica la llamada a la tabla de identificadores
}
en otro hilo
while (1
for (int i = 0; i lt; table.size(); i )
if (isOver(table[i]))
CloseHandle (table[i]);
Preste atención a la sincronización entre estos dos subprocesos, principalmente a la seguridad de los subprocesos de la estructura de datos de la tabla
.