我在做Linux中的C程序。我有一個主線程連續更新兩個變量的值,其他線程每20毫秒將這些變量值寫入文件。我已經用了睡眠來達到這個時間間隔。示例代碼如下。是否適合在c中使用usleep作爲Timer?
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'獲得當前時間,並且只保留下一個活動缺少的時間。 – Marian
C11草案標準n1570:* 5.1.2.4多線程執行和數據競爭4如果其中一個表達式評估修改了某個內存位置,並且另一個讀取或修改了相同的內存位置,則兩個表達式評估發生衝突。 25程序的執行包含一個數據爭用,如果它包含兩個不同線程中的衝突動作,其中至少有一個不是原子的,並且兩個線程都不在 之前。任何這樣的數據競爭都會導致未定義的行爲。* TL; DR:'sleep()'不是同步。 – EOF