reentrant

    0熱度

    1回答

    據我所知,printf()是線程安全的,不可重入。 現在,如果我通過一個函數調用的結果是這樣的參數: printf("\"%d\" squared is \"%d\".\n", 5, squareOfInteger(5)); 將功能squareofInteger也是在多線程程序成爲線程安全的?

    0熱度

    2回答

    我對「可重入函數」的理解是,它是一個可以被中斷的函數(例如,通過ISR或遞歸調用),並且稍後恢復,從而函數的總輸出不受任何影響通過中斷的方式。 以下是從維基百科https://en.wikipedia.org/wiki/Reentrancy_(computing) int t; void swap(int *x, int *y) { int s; s = t; // s

    0熱度

    1回答

    我明白了。 Datagridview cannot be in the process of changing ANYTHING。我不認爲我是,但我偶爾也會得到這個例外。這真是太奇怪了。超過90%以上的時間工作得很好。 我有一個windows窗體上的tabcontrol和多個tabpages有datagrid視圖控件。它們中沒有一個綁定到數據庫。當用戶瀏覽標籤頁時,每個標籤頁的「輸入」和「離開」事

    0熱度

    1回答

    我正在使用System.Timers.Timer,函數設置爲Elapsed。 'aTimer.Elapsed + = OnTimedEvent`設置爲定期在定期發射。假設這種情況每5秒發生一次。 如果由於某種原因,處理OnTimedEvent最後超過 5秒會發生什麼情況。 根據該文件,*事件可能再次在另一個線程池線程提高。在這種情況下,事件處理程序應該是折返。* 雖然我明白這個莫名其妙的理論術語,

    0熱度

    1回答

    當存在可重入同步時,它進入無限循環並以StackOverflow異常結束。 下面的代碼首先打印「Outer」,然後繼續打印「Inner」。 有人能告訴我爲什麼是這種行爲? public void outer() { synchronized (this) { System.out.println("Outer"); inner();

    0熱度

    1回答

    我正在使用flex/bison生成C++掃描程序/解析器的業餘愛好項目。因爲有大量的解析對象。解析本身是令人尷尬的並行問題。我想集中一些準備運行的掃描器/解析器對象並讓它們並行運行。 我通過Flex和Bison官方文檔閱讀並瀏覽了他們生成的代碼。 我可以確認從Flex文檔及其代碼生成的C++掃描程序是可重入的。 但是,我很難從Bison文件中確認這一點。它確實有文檔說明如何在Bison中構建可重入

    5熱度

    2回答

    我正在學習如何一起使用可重入Bison和Flex。我已經有了一個簡單的計算器,沒有重入功能。但是,當我激活重入特性並進行必要的修改時,我無法使其工作。 下面是代碼: scanner.l %{ #include <stdio.h> #include "parser.tab.h" %} %option 8bit reentrant bison-bridge %option warn noy

    3熱度

    3回答

    「可重入」可能不是合適的術語,但我認爲它很接近。 如果我與另一個用戶共享一個腳本,並且我們同時執行它,我們是否覆蓋其他變量?或者兩個執行是否發生在完全不同的內存空間中? 我在哪裏可以看到這個? 如果可重入是錯誤的術語,那麼正確的術語是什麼? 更新14/10/03 o9:45 EDT: 我不認爲這個權證要求一個新的問題。 我從Serge和Henrique瞭解到單獨執行是「線程安全」的,並且共享資源上

    1熱度

    1回答

    我想了解重入代碼的含義。我有這樣的代碼: void HWt::startElement(uint8_t HW, uint8_t val) { writeBitsToregister(REG_VAL + HW*131072, 0, 3, val); //Write bits 0-2 writeBitToregister(REG_VAL, 3, 1); //Set bit 3 t

    7熱度

    2回答

    這裏的代碼,IBM公司表示,一個片段是折返的: /* reentrant function (a better solution) */ char *strtoupper_r(char *in_str, char *out_str) { int index; for (index = 0; in_str[index]; index++) out_str[inde