ORA-28000: the account is locked-的解决办法
C/C++ 写两个线程,一个线程输出 1 - 52,另一个线程输出 A - Z,要求输出格式为: 12A,34B,56C …
这是面试某公司时候的面试题,在网上找到的都是Java版本的或者python版本的处理方案,所以在这里给出C/C++的解决方案。
//写两个线程,一个线程输出 1 - 52,另一个线程输出 A - Z,要求输出格式为: 12A,34B,56C .....
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t condNum;
static pthread_cond_t condAZ;
void* printNum(void* arg)
{
int a = 0;
while (a<52)
{
pthread_mutex_lock(&mtx);
pthread_cond_wait(&condAZ, &mtx);
printf("%d",++a);
printf("%d",++a);
pthread_mutex_unlock(&mtx);
pthread_cond_signal(&condNum);
}
}
void* printAZ(void* arg)
{
char b = 'A';
while (b<='Z')
{
pthread_mutex_lock(&mtx);
pthread_cond_wait(&condNum, &mtx);
printf("%c, ",b++);
pthread_mutex_unlock(&mtx);
pthread_cond_signal(&condAZ);
}
}
int main()
{
pthread_t threadNum;
pthread_t threadAZ;
pthread_cond_init(&condNum, NULL);
pthread_cond_init(&condAZ, NULL);
pthread_create(&threadNum, NULL, &printNum, NULL);
pthread_create(&threadAZ, NULL, &printAZ, NULL);
printf("main begin..\n");
sleep(1);
pthread_cond_signal(&condAZ);
pthread_join(threadNum, NULL);
pthread_join(threadAZ, NULL);
printf("\n");
return 0;
}
输出的结果
原创:转发请声明地址