我正在尝试模拟服务器/客户端套接字通信,并为每个客户端使用线程,然后使用互斥锁来锁定和解锁这些客户端。
Mutex运行正常,即使我打开另一个终端并运行客户端脚本,它也会被阻塞,直到服务器解锁它,但由于一些错误的编码原因,第二个客户端从第一个客户端获取相同的ID。
所以,我想在每次运行新客户端时创建一个新线程。但我认为这就是" fork"由于某种原因,这是问题......
int counter = 0;
int i = 0;
int j = 0;
void* operacoes (void*);
pthread_mutex_t mutexA = PTHREAD_MUTEX_INITIALIZER;
pthread_t thread_id [10];
int var;
int jo = 0;
int t = 0;
int main()
{
int sock_fd, sock_len, sock_novo, sock_novo_len,num;
struct sockaddr_un sock_ser, sock_cli;
char msg[100];
sock_fd = socket(AF_UNIX, SOCK_STREAM,0);
if(sock_fd<0)
{
printf("ERROR\n");
exit(0);
}
unlink("socket.unix.teste");
bzero((char*)&sock_ser, sizeof(sock_ser));
sock_ser.sun_family = AF_UNIX;
strcpy(sock_ser.sun_path,"socket.unix.teste");
sock_len = strlen(sock_ser.sun_path) +sizeof(sock_ser.sun_family);
if(bind(sock_fd,(struct sockaddr*)&sock_ser,sock_len)<0)
{
printf("ERROR\n");
exit(0);
}
listen(sock_fd,5);
for(;;)
{
sock_novo_len = sizeof(sock_cli);
sock_novo = accept(sock_fd, (struct sockaddr*)&sock_cli,&sock_novo_len);
if(fork() == 0)
{
close(sock_fd);
num = atoi(msg);
counter++;
for (i = jo; i<counter; i++)
{
pthread_create (&thread_id[i], NULL, operacoes, (void *)num);
jo++;
}
for (j = t; j<counter; j++)
{
pthread_join(thread_id[j], NULL);;
t++;
}
exit(0);
}
close(sock_novo);
}
return 0;
}
void* operacoes (void *arg)
{
if(arg == 1)
{
int id = pthread_self();
printf("Thread nummber: %d \n", id);
pthread_mutex_lock (&mutexA);
printf("Locked\n");
sleep(10);
pthread_mutex_unlock (&mutexA);
printf("Unlocked\n");
}
return 0;
}
在客户端,我只发送一个变量&#39; msg&#39;。
我该怎么解决?我尝试使用这两个变量&#39; jo&#39;并且&#39;#,但是我创建的每个新客户端,它读取整个代码,然后它返回到0,所以我无法获得下一个phthread_create的向量位置。
答案 0 :(得分:0)
假设我理解你想要达到的目标:
试试这个:
project settings > select your main app target > Build phases > Compile Sources