我不明白它的含义,无论我怎么google,到处都是肥皂写的或者没有实际代码的理论,谁能解释一下什么是 volatile 以及如何有意义地使用它?
我决定从 e-olymp 解决这个问题,这对我来说似乎很容易,代码附在下面,但由于某种原因它的准确率是 30%,我什至不知道问题是什么,代码做了所说的。
问题条件:给定一个有理分数t/p,将其写成精确到小数点后的小数分数。
输入数据:一行包含3个数字,n,k.0 m,n≤100,0≤k≤1000。
输出:输出到所需数字的小数点后的精确有效数字。
输入示例 - 123 答案 - 0.500
#include <stdio.h>
int main()
{
int a, b, c;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
float result = (float) a / b;
printf("%.*f", c, result);
}
这段代码有什么问题?
菜单接受多个字符,即当您输入“hrhrhrhr”时,会调用一个应该通过输入“h”等来调用的函数。事实上,当输入与指定的字符不同的字符时,会出现错误被抛出并再次提供输入。我解释得很笨拙,但我不知道如何正确地表达它。这是一些简单的代码:
#include <libintl.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main()
{
char option;
bool isRunning = true;
while(isRunning == true)
{
printf("\nCapere actio: ");
fflush(stdin);
option = getchar();
switch(option)
{
case 'h':
printf("Actionis:\n");
help();
break;
case 'c':
create();
break;
case 'l':
printf("Index numerorum:\n\n");
list();
break;
case 'q':
printf("Exitus\n");
isRunning = false;
break;
default:
printf("Actio invalidum!\n");
break;
}
}
return 0;
}
大家好!这样的问题是“引入互斥锁、信号量或读写锁来保护关键部分。如果任务指定了特定的保护机制,则仅使用它。关于超市的问题。两个收银员在超市工作,顾客进入超市,进行购买并排队到随机的收银员处。当队列为空时,收银员睡觉,一旦顾客出现,收银员就会醒来。顾客在队列中睡觉,直到他接近收银员。创建一个多线程模拟超市工作日的应用程序。”
这是我潦草地写的(别怪我代码很烂,我对C一点也不熟悉,他们给我们这个手册真是太糟糕了)。程序中只有客户功能有效,收银员每秒都在无休止地为客户 0 服务。我不明白为什么,好像信号量不起作用,但似乎我做的一切都是正确的(至少在我看来)了解信号量如何工作)
#include <pthread.h>
#include <semaphore.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define NUM_CUSTOMERS 10
#define NUM_CASHIERS 2
typedef struct {
int customers[NUM_CUSTOMERS];
int front;
int rear;
} Queue;
Queue queue[NUM_CASHIERS];
pthread_mutex_t mutex_cashiers[NUM_CASHIERS]; // Мьютексы для кассиров
sem_t sem_cashiers[NUM_CASHIERS];
void initializeQueue(Queue *queue) {
queue->front = 0;
queue->rear = 0;
}
void enqueue(Queue *queue, int item) {
queue->customers[queue->rear] = item;
queue->rear = (queue->rear + 1) % NUM_CUSTOMERS;
}
int dequeue(Queue *queue) {
int item = queue->customers[queue->front];
queue->front = (queue->front + 1) % NUM_CUSTOMERS;
return item;
}
void *cashier(void *args) {
int cashier_number = *((int *)args);
while (1) {
sem_wait(&sem_cashiers[cashier_number]);
pthread_mutex_lock(&mutex_cashiers[cashier_number]);
int customer_num = dequeue(&queue[cashier_number]);
printf("Касса %d обслуживает покупателя %d.\n", cashier_number + 1, customer_num);
sleep(1);
printf("Касса %d завершила обслуживание покупателя %d.\n", cashier_number + 1, customer_num);
pthread_mutex_unlock(&mutex_cashiers[cashier_number]);
}
}
void *customer(void *args) {
int customer_number = *((int *)args);
sleep(rand() % 10 + 1);
printf("Покупатель %d зашёл в магазин и делает покупки...\n", customer_number);
sleep(rand() % 10 + 1);
int cashier_choice = rand() % NUM_CASHIERS;
pthread_mutex_lock(&mutex_cashiers[cashier_choice]);
enqueue(&queue[cashier_choice], customer_number);
printf("Покупатель %d встал в очередь к Кассе %d.\n", customer_number, cashier_choice + 1);
sem_post(&sem_cashiers[cashier_choice]);
pthread_mutex_unlock(&mutex_cashiers[cashier_choice]);
return NULL;
}
int main(void) {
pthread_t threads_cashiers[NUM_CASHIERS];
pthread_t threads_customers[NUM_CUSTOMERS];
for (int i = 0; i < NUM_CASHIERS; i++) {
int *cashier_number = malloc(sizeof(int));
*cashier_number = i;
pthread_create(&threads_cashiers[i], NULL, cashier, (void *)cashier_number);
initializeQueue(&queue[i]);
pthread_mutex_init(&mutex_cashiers[i], NULL);
sem_init(&sem_cashiers[i], 0, 0);
}
for (int i = 0; i < NUM_CUSTOMERS; i++) {
int *customer_number = malloc(sizeof(int));
*customer_number = i;
pthread_create(&threads_customers[i], NULL, customer, (void *)customer_number);
}
for (int i = 0; i < NUM_CUSTOMERS; i++) {
pthread_join(threads_customers[i], NULL);
}
for (int i = 0; i < NUM_CASHIERS; i++) {
pthread_mutex_destroy(&mutex_cashiers[i]);
sem_destroy(&sem_cashiers[i]);
pthread_join(threads_cashiers[i], NULL);
}
return 0;
}
在了解数据结构的同时,我遇到了权力的概念。例如,#int = 2^(sizeof(int)*8)。另外 sizeof array = sizeof(Tdata) * #Tindex 和 #array = #Tdata^(#Tindex)。目前还不清楚什么是Tdata,什么是Tindex。我还想查看对某些数组使用这些公式的示例。比如说如何计算数组 int array[10] = {0, ... ,9} 的幂?