Pthread与C语言
这是我的密码:Pthread与C语言,c,pthreads,C,Pthreads,这是我的密码: static long x = 0; void * thread_func(void *arg){ while(1){ printf("Thread 2 says %ld\n",++x); sleep(1); } } int main(){ pthread_t tid; pthread_create(&tid,NULL,thread_func,NULL); while(x < 10) { printf("Thread 1 says %ld
static long x = 0;
void * thread_func(void *arg){
while(1){
printf("Thread 2 says %ld\n",++x);
sleep(1);
}
}
int main(){
pthread_t tid;
pthread_create(&tid,NULL,thread_func,NULL);
while(x < 10) {
printf("Thread 1 says %ld\n",++x);
sleep(2);
}
return 0;
}
现在不应该是第一个线程,因为pthread\u create()
在main中的while循环之前。
这里的睡眠是如何工作的?
比如线程睡眠到底是为了什么,执行线程睡眠时执行什么进程
i、 睡眠(1)和睡眠(2)1和2代表什么?我不确定你在读什么书,但你应该立即停止阅读。首先,在
main
中进入循环之前,您不能保证线程将启动并运行。它可以在之前或之后开始。其次,当从两个不同的线程访问变量x
时,没有访问同步,因此无法保证它将具有什么值。调用printf
会同步stdout
对象,调用sleep
会将线程调出,并且需要花费大量时间来再次调度它。这个例子是无用的,关于输出的假设是错误的
现在,一些答案
现在第一个不应该是线程2说1,因为
pthread_create()位于main中while循环之前
不一定。启动另一个线程需要大量的CPU周期。因此,在另一个线程启动之前,您很可能会在main
中的循环中输入。但是,不一定
这里的睡眠是如何工作的
它告诉内核在给定的秒数内不要执行调用线程。由于与调度相关的开销,实际睡眠时间可能会稍长一些。其他线程不受此影响(当然,它们受此影响,但不直接受此影响,即其他线程可能有更多的CPU时间等)
执行线程休眠时执行哪个进程
进程从不执行任何操作。执行进程(和线程)的是内核的调度。默认情况下,进程由一个主线程组成,内核执行它。当您创建更多线程时,调度程序将在进程内执行更多线程等。当一个或多个线程处于睡眠状态时,调度程序将执行那些未处于睡眠状态的线程。把线程想象成共享同一地址空间的进程——这就是它们。我不确定你在读什么书,但你应该立即停止阅读。首先,在main
中进入循环之前,您不能保证线程将启动并运行。它可以在之前或之后开始。其次,当从两个不同的线程访问变量x
时,没有访问同步,因此无法保证它将具有什么值。调用printf
会同步stdout
对象,调用sleep
会将线程调出,并且需要花费大量时间来再次调度它。这个例子是无用的,关于输出的假设是错误的
现在,一些答案
现在第一个不应该是线程2说1,因为
pthread_create()位于main中while循环之前
不一定。启动另一个线程需要大量的CPU周期。因此,在另一个线程启动之前,您很可能会在main
中的循环中输入。但是,不一定
这里的睡眠是如何工作的
它告诉内核在给定的秒数内不要执行调用线程。由于与调度相关的开销,实际睡眠时间可能会稍长一些。其他线程不受此影响(当然,它们受此影响,但不直接受此影响,即其他线程可能有更多的CPU时间等)
执行线程休眠时执行哪个进程
进程从不执行任何操作。执行进程(和线程)的是内核的调度。默认情况下,进程由一个主线程组成,内核执行它。当您创建更多线程时,调度程序将在进程内执行更多线程等。当一个或多个线程处于睡眠状态时,调度程序将执行那些未处于睡眠状态的线程。把线程想象成共享同一地址空间的进程——这就是它们。这个程序有一个巨大的缺陷,这是任何多线程程序都无法承受的。实际上,我允许一个全局变量“x”被两个线程操纵,而不需要它们之间的任何同步。这肯定会导致变量中包含的数据变得不一致。将导致不可预测的输出。你需要参考一本有好例子的好书。基本上,这个想法是在访问变量“x”时使用锁
正如上面其他人所指出的,睡眠将阻止内核在所需的秒数内执行线程。我觉得它在这里被用作同步的手段。然而,睡眠从来都不是一个好的选择,因为它不能保证变量“x”上的操作不会变得不一致。不要依赖睡眠。使用锁。一个开始线程编程的好地方是
它是pthread的入门 该程序有一个巨大的缺陷,这是任何多线程程序都无法承受的。实际上,我允许一个全局变量“x”被两个线程操纵,而不需要它们之间的任何同步。这肯定会导致变量中包含的数据变得不一致。将导致不可预测的输出。你需要参考一本有好例子的好书。基本上,这个想法是在访问变量“x”时使用锁
正如上面其他人所指出的,睡眠将阻止内核在所需的秒数内执行线程。我觉得它在这里被用作同步的手段。然而,睡眠从来都不是一个好的选择,因为它不能保证变量“x”上的操作不会变得不一致。不要依赖睡眠。使用锁。一个开始线程编程的好地方是
它是pthread的入门 Sleep(1)
并不意味着:嘿,请给我1号线
OUTPUT
Thread 1 says 1
Thread 2 says 2
Thread 2 says 3
Thread 1 says 4
Thread 2 says 5
Thread 2 says 6
Thread 1 says 7
Thread 2 says 8
Thread 2 says 9
Thread 1 says 10
Thread 2 says 11
Thread 2 says 12