我正在使用pthread_mutex_t进行锁定.
pthread_mutex_t m_lock;
void get1() {
cout<<"Start get 1"<<endl;
pthread_mutex_lock(&m_lock);
get2();
pthread_mutex_unlock(&m_lock);
cout<<"End get 1"<<endl;
}
void get2() {
cout<<"Start get 2"<<endl;
pthread_mutex_lock(&m_lock); // The program actually stops here because it waits to m_lock to be unlock from get1 function.
pthread_mutex_unlock(&m_lock);
cout<<"End get 2"<<endl;
}
// The thread call to run function
void* run(void* p) {
get1();
}
Run Code Online (Sandbox Code Playgroud)
假设我只有一个调用run函数的线程,所以:get1锁定m_lock并调用get2,但是当它试图锁定m_lock时,它等待锁定将被解锁(某些事情没有发生)我们得到了一个僵局.
我的问题是,当在get1中锁定锁的同一个线程不需要等待get2中的锁(因为它是同一个线程)时,我怎么能避免这种情况?
例如,在Java中,当您使用synchornized时,这种情况永远不会发生.
public Test implements Runnable {
public void get1() {
System.out.println("Start get 1");
synchronized (this) {
get2();
}
System.out.println("End get …Run Code Online (Sandbox Code Playgroud) 我认为我的 makefile 非常好,但后来我尝试仅更新头文件并重新编译我的库,但它没有改变任何内容。
我怎样才能让它工作并重新编译 h 文件中的代码。
我的生成文件:
SHELL = /bin/sh
SOURCE_FILES_DIRS = -I./../frmwrk/ -I./../Utils/
CXX = g++
CXXFLAGS = $(SOURCE_FILES_DIRS) -std=c++17 -rdynamic -fPIC -g -Wall
LDFLAGS = -shared
LIBS_DIR = ../../libs/
LIB_NAME = libIni.so
TARGET = $(LIBS_DIR)$(LIB_NAME)
SOURCES = $(shell echo *.cpp)
HEADERS = $(shell echo *.h)
OBJECTS = $(SOURCES:.cpp=.o)
LINK_LIBS = -lFrmwrk -lUtils
PREFIX = $(DESTDIR)/usr/local
BINDIR = $(PREFIX)/bin
all: $(TARGET)
$(TARGET): $(OBJECTS) $(HEADERS)
$(CXX) $(CXXFLAGS) -L$(LIBS_DIR) $(LDFLAGS) -o $(TARGET) $(OBJECTS) $(HEADERS) $(LINK_LIBS)
clean:
rm -f *.o $(TARGET)/*.so
rm …Run Code Online (Sandbox Code Playgroud) 我是忍者新手。还是不知道怎么用。
我创建了一个简单的hello.cpp文件:
#include <iostream>
int main()
{
std::cout << "Hello World!" << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 Linux Ubuntu。
我已经安装了 CMake:apt install cmake
我已经安装了忍者:apt-get install ninja-build
但现在我应该怎么做才能用hello.cppNinja 编译我的文件呢?
我尝试运行ninja,但出现以下错误rules.ninja:
ninja: error: build.ninja:30: loading 'rules.ninja': No such file or directory
Run Code Online (Sandbox Code Playgroud)
我不知道如何创建rules.ninja和如何配置它,也不知道我是否错过了更多的东西。