我是一名大学生,作为网络作业的一部分,我需要执行停止等待协议。问题陈述需要使用 2 个线程。我是线程新手,但是在浏览了 pthreads API 的手册页之后,我编写了基本代码。但是,成功创建线程后(在执行作为参数传递给 pthread_create() 的函数的第一行时)出现分段错误。
typedef struct packet_generator_args
{
int max_pkts;
int pkt_len;
int pkt_gen_rate;
} pktgen_args;
/* generates and buffers packets at a mean rate given by the
pkt_gen_rate field of its argument; runs in a separate thread */
void *generate_packets(void *arg)
{
pktgen_args *opts = (pktgen_args *)arg; // error occurs here
buffer = (char **)calloc((size_t)opts->max_pkts, sizeof(char *));
if (buffer == NULL)
handle_error("Calloc Error");
//front = back = buffer;
........
return 0;
}
主线程从此缓冲区读取数据包并运行停止等待算法。
pktgen_args thread_args;
thread_args.pkt_len = DEF_PKT_LEN;
thread_args.pkt_gen_rate = DEF_PKT_GEN_RATE;
thread_args.max_pkts = DEF_MAX_PKTS;
/* initialize sockets and other data structures */
.....
pthread_t packet_generator;
pktgen_args *thread_args1 = (pktgen_args *)malloc(sizeof(pktgen_args));
memcpy((void *)thread_args1, (void *)&thread_args, sizeof(pktgen_args));
retval = pthread_create(&packet_generator, NULL, &generate_packets, (void *)thread_args1);
if (retval != 0)
handle_error_th(retval, "Thread Creation Error");
.....
/* send a fixed no of packets to the receiver wating for ack for each. If
the ack is not received till timeout occurs resend the pkt */
.....
我尝试使用 gdb 进行调试,但无法理解为什么我的generate_packets()
函数的第一行会出现分段错误。希望你们中的一个可以提供帮助。如果有人需要额外的上下文,可以在http://pastebin.com/Z3QtEJpQ获得整个代码。我在这里花了好几个小时才真正陷入困境。任何帮助将不胜感激。