我有2个帖子。 我的目标是第一个终止自己的执行,必须停止另一个线程。 有可能吗?
我有这段代码:
#include <stdio.h>
#include <pthread.h>
#include <sys/types.h>
void* start1(void* arg)
{
printf("I'm just born 1\n");
int i = 0;
for (i = 0;i < 100;i++)
{
printf("Thread 1\n");
}
printf("I'm dead 1\n");
pthread_exit(0);
}
void* start2(void* arg)
{
printf("I'm just born 2\n");
int i = 0;
for (i = 0;i < 1000;i++)
{
printf("Thread 2\n");
}
printf("I'm dead 2\n");
pthread_exit(0);
}
void* function()
{
int k = 0;
int i = 0;
for (i = 0;i < 50;i++)
{
k++;
printf("I'm an useless function\n");
}
}
int main()
{
pthread_t t, tt;
int status;
if (pthread_create(&t, NULL, start1, NULL) != 0)
{
printf("Error creating a new thread 1\n");
exit(1);
}
if (pthread_create(&tt, NULL, start2, NULL) != 0)
{
printf("Error creating a new thread 2\n");
exit(1);
}
function();
pthread_join(t, NULL);
pthread_join(tt, NULL);
return 0;
}
例如,第一个线程必须停止第二个线程。 怎么可能这样做?
答案 0 :(得分:10)
通常强制线程终止并不好。终止另一个线程的简洁方法是设置一个标志(两个线程都可见),告诉线程自行终止(通过立即返回/退出)。
答案 1 :(得分:0)
这听起来像是非常复杂(糟糕)的设计。通常你会有一个主人(控制者),它会有孩子。
如果你必须采用这种方法,我会让第一个线程产生第二个,然后第二个产生thrid(这样它“拥有”那个线程)。
最后,如果你必须这样做,你可以通过它的void *参数将线程传递给第一个worker。
此外,您不需要显式退出线程,只需让它“运行”然后加入它。
答案 2 :(得分:0)
将2个线程作为参数传递给另一个线程的线程id。而不是在完成他的工作的第一个中调用pthread_kill(other_thread_id, SIGKILL)
。我假设你知道你在做什么(你已经被警告过这是不好的做法)。
答案 3 :(得分:0)
请参阅方法pthread_cancel()
取消(结束)一个帖子。