我在Ubuntu下编写了如下程序,使用制表符:
cout << "Please enter one of the following choices: " << endl;
cout << "c) carnivore\tp) pianist." << endl
<< "t) tree\tg) game" << endl;
并获得了如下输出
Please enter one of the following choices:
c) carnivore p) pianist.
t) tree g) game
但我希望获得如下格式的输出:
Please enter one of the following choices:
c) carnivore p) pianist
t) tree g) game
想问一下我的问题出在哪里,万分感谢。
该回答引用GPT:
你的问题可能是因为没有设置正确的制表符宽度,导致输出的格式不正确。可以使用setw函数来设置制表符的宽度,如下所示:
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
cout << "Please enter one of the following choices: " << endl;
cout << setw(20) << "c) carnivore" << setw(20) << "p) pianist." << endl
<< setw(20) << "t) tree" << setw(20) << "g) game" << endl;
return 0;
}
运行上面的代码,可以得到如下输出:
Please enter one of the following choices:
c) carnivore p) pianist.
t) tree g) game
如还有疑问,可留言帮助解决。
信号量
P(SV)
:如果信号量SV
大于0,将它减一;如果SV
值为0,则挂起该线程。V(SV)
:如果有其他进程因为等待SV
而挂起,则唤醒,然后将SV+1
;否则直接将SV+1
。sem_wait(sem_t *sem)
: 以原子操作的方式将信号量减1
,如果信号量值为0
,则sem_wait
将被阻塞,直到这个信号量具有非0值。sem_post(sem_t *sem)
: 以原子操作将信号量值+1
。当信号量大于0
时,其他正在调用sem_wait
等待信号量的线程将被唤醒。互斥量
pthread_mutex_init
:初始化互斥锁pthread_mutex_destroy
:销毁互斥锁pthread_mutex_lock
:以原子操作的方式给一个互斥锁加锁,如果目标互斥锁已经被上锁,pthread_mutex_lock
调用将阻塞,直到该互斥锁的占有者将其解锁。pthread_mutex_unlock
:以一个原子操作的方式给一个互斥锁解锁。条件变量
signal/broadcast
。此时操作共享变量时需要加锁。pthread_cond_init
:初始化条件变量pthread_cond_destroy
:销毁条件变量pthread_cond_signal
:唤醒一个等待目标条件变量的线程。哪个线程被唤醒取决于调度策略和优先级。pthread_cond_wait
:等待目标条件变量。需要一个加锁的互斥锁确保操作的原子性。该函数中在进入wait状态前首先进行解锁,然后接收到信号后会再加锁,保证该线程对共享资源正确访问。