Red de conocimiento informático - Material del sitio web - Problemas con socket.accept multiproceso

Problemas con socket.accept multiproceso

Hay dos métodos

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

.