【发布时间】:2016-08-09 06:26:52
【问题描述】:
我在 Linux 中做 C 程序。我有一个主线程,它不断更新两个变量的值,其他线程每 20 毫秒将这些变量值写入一个文件。我已经使用 usleep 来实现这个时间间隔。示例代码如下。
main()
{
.
.
.
.
.
pthread_create(...write_file..); /* started another thread by passing a function write_file */
while(variable1)
{
updates value of variables
}
return 0;
}
void write_file()
{
.
.
.
.
fp = fopen("sample.txt" , "a");
while(variable2)
{
fprintf(fp," %d \n", somevariable);
usleep(20 * 1000);
}
fclose(fp);
}
是否适合使用usleep功能达到20毫秒的时间间隔,还是应该使用其他一些方法,如Timer。? 这种睡眠是否足够准确?这个睡眠功能会影响主线程吗?
【问题讨论】:
-
至少您可以使用
gettimeofday或clock_gettime获取当前时间,并仅在下一个活动缺少的时间睡觉。 -
C11 标准草案 n1570:5.1.2.4 多线程执行和数据竞争 4 如果其中一个修改了内存位置,而另一个读取或修改了相同的内存位置,则两个表达式计算冲突. 25 如果一个程序在不同线程中包含两个相互冲突的操作,则该程序的执行包含数据竞争,其中至少一个不是原子的,并且两者都不会在另一个之前发生。任何此类数据竞争都会导致未定义的行为。 TL;DR:
sleep()不是同步。
标签: c multithreading timer pthreads