0
- 嗨,我使用C庫來編程機器人。在閱讀 的代碼時,我遇到了「_ 線程」這個詞,我不知道它的意思是什麼 。我試圖通過該項目進行搜索以查看 是否有「 _thread」的任何定義,但對我來說它沒有意義 。下面的代碼我猜可能與我的問題有關。
我的問題是,從「static __thread Thread * threadData;」行和「__thread AssertFramework ::主題* AssertFramework :: threadData = 0;」?,你能猜出「__thread「的意思是一類特殊的函數名的指針線程???在Ubuntu上「__thread」
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include <pthread.h>
#include <cstring>
...
class AssertFramework
{
public:
struct Line
{
char file[128];
int line;
char message[128];
};
struct Track
{
Line line[16];
int currentLine;
bool active;
};
struct Thread
{
char name[32];
Track track[2];
};
struct Data
{
Thread thread[2];
int currentThread;
};
static pthread_mutex_t mutex;
static __thread Thread* threadData;
int fd;
Data* data;
AssertFramework() : fd(-1), data((Data*)MAP_FAILED) {}
~AssertFramework()
{
if(data != MAP_FAILED)
munmap(data, sizeof(Data));
if(fd != -1)
close(fd);
}
bool init(bool reset)
{
if(data != MAP_FAILED)
return true;
fd = shm_open("/bhuman_assert", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
if(fd == -1)
return false;
if(ftruncate(fd, sizeof(Data)) == -1 ||
(data = (Data*)mmap(NULL, sizeof(Data), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)) == MAP_FAILED)
{
close(fd);
fd = -1;
return false;
}
if(reset)
memset(data, 0, sizeof(Data));
return true;
}
} assertFramework;
pthread_mutex_t AssertFramework::mutex = PTHREAD_MUTEX_INITIALIZER;
__thread AssertFramework::Thread* AssertFramework::threadData = 0;
? 。
可能是一個編譯器的具體實現[線程本地存儲(HTTP的:// en.wikipedia.org/wiki/Thread-local_storage) –
這是一個存儲類,像'static'或'extern'。 –