LINUX下多线程编程,运行出错:Create pthread error! Resource temporarily unavailable
把相关的代码贴上来,请各位大大们和版主大人帮我分析一下!谢谢!
void pthread_comsend(void) {
// printf("begin 485 send:%s !\n",tcpbuf);
// printf("pthread_comsend : tcpbuf=%s\n",tcpbuf);
char *tcpbuftmp;
pthread_mutex_lock(&mut);
tcpbuftmp=malloc(sizeof(tcpbuf));
tcpbuftmp=tcpbuf;
pthread_mutex_unlock(&mut);
rs485_send(rsfd,comfd,tcpbuftmp);
memset(tcpbuf, 0, TCP_BUF_SIZE); //when sent, clear the send buffer
// printf("end 485 send!\n");
}
while(1) {
tmp_inset = inset;
sin_size=sizeof(struct sockaddr_in);
//memset(tcpbuf, 0, TCP_BUF_SIZE);
if ( select(MAX_SOCK_FD, &tmp_inset, NULL, NULL, 0) <= 0) //&timeout
{
perror("select");
close(sockfd);
exit(1);
}
for (selectfd = 0; selectfd < MAX_SOCK_FD; selectfd++)
{
if (FD_ISSET(selectfd, &tmp_inset) > 0)
{
if (selectfd == sockfd) { //there's a client waiting for connect server !
if ((client_fd = accept(sockfd, (struct sockaddr *)&client_sockaddr, &sin_size))== -1)
{
perror("accept");
exit(1);
}
FD_SET(client_fd, &inset);
strcpy(clientip[client_fd], inet_ntoa(client_sockaddr.sin_addr)); //record the selectfd ip address
printf("New connection from %d(socket)\n", client_fd);
printf("ip address is :%s \n", inet_ntoa(client_sockaddr.sin_addr));
}
else //recieve order or data !
{
pthread_mutex_lock(&mut);
ret= recv(selectfd, tcpbuf, TCP_BUF_SIZE, 0 );
pthread_mutex_unlock(&mut);
if ( ret > 0) {
pthread_mutex_lock(&mut);
printf("Received a message from %d ip=%s : %s\n", selectfd,clientip[selectfd], tcpbuf);
pthread_mutex_unlock(&mut);
recentfd=selectfd;
//printf("main(hadn't writen): tcpbuf=%s\n",tcpbuf);
fputs("recieve from ",fp);
fputs(clientip[selectfd],fp);
fputc(':',fp);
pthread_mutex_lock(&mut);
fputs(tcpbuf,fp);
pthread_mutex_unlock(&mut);
fputc('\n',fp);
rewind(fp);
//printf("main(had writen): tcpbuf=%s\n",tcpbuf);
ret=pthread_create(&pth_id2,NULL,(void *) pthread_comsend,NULL); //pthread instead of fork !!
if(ret!=0){
//printf("pth_id2=%d\n",pth_id2);
pprintf("error tcpbuf",tcpbuf,20);
printf ("Create pthread error! %s \n",strerror(ret)); //////////////////////////////////////////////////////////////////////////////程序出错点在这里!
exit (1);
}
//printf("PTHREAD_THREADS_MAX=%d\n",PTHREAD_THREADS_MAX);
//back send the recieve string
/* if ((sendbytes = send(selectfd, tcpbuf, strlen(tcpbuf), 0)) == -1) {
perror("send");
exit(1);
}
printf("send a message: %s\n", tcpbuf); */
}
else //recieve exit order , and print the message
{
close(selectfd);
FD_CLR(selectfd, &inset);
strcpy(clientip[selectfd], "\0"); //clear IP table
pthread_mutex_lock(&mut);
printf("Client %d(socket) %s(ip address) has left\n", selectfd,clientip[selectfd], tcpbuf);
pthread_mutex_unlock(&mut);
//disdoor=1;
}
}
} /* end of if FD_ISSET*/
} /* end of for selectfd*/
}
那个线程互拆锁是我后来加上去的,加上之后,程序运行还是这个错误。我不知道线程互拆锁是不是这个用法,还是我没有用对?还是对我出现的问题没有作用?先感谢各位前辈!