You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

127 lines
2.5 KiB

//
// Created by 马也驰 on 2024/12/20.
//
#include "../db/slotpage.h"
#include <thread>
#define SLOTNUM 8192
void printVector(const std::vector<size_t>& vec) {
for (size_t i = 0; i < vec.size(); ++i) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
}
int test1() {
BitMap bitmap("test");
std::vector<size_t> slots;
slots.reserve(SLOTNUM<<2);
int i = 0;
for (i = 0; i < 2047; i++) {
slots.push_back(bitmap.alloc_slot());
}
slots.push_back(bitmap.alloc_slot());
for (; i < SLOTNUM<<2; i++) {
slots.push_back(bitmap.alloc_slot());
}
printVector(slots);
std::cout << "\n\n";
for (i = 0; i < 100; i++) {
bitmap.dealloc_slot(slots.at(i));
}
bitmap.dealloc_slot(10000);
bitmap.dealloc_slot(11000);
bitmap.dealloc_slot(12000);
bitmap.show_allocated_slot();
std::cout << "\n\n";
for (i = 0; i < 103; i++) {
bitmap.alloc_slot();
}
bitmap.show_allocated_slot();
return 1;
}
int test2() {
BitMap bitmap("test");
std::vector<size_t> slots;
slots.reserve(SLOTNUM);
for (auto i = 0; i < SLOTNUM; i++) {
slots.push_back(bitmap.alloc_slot());
}
printVector(slots);
std::cout << "\n\n";
bitmap.dealloc_slot(30);
bitmap.dealloc_slot(40);
bitmap.dealloc_slot(50);
bitmap.show_allocated_slot();
std::cout << "\n\n";
bitmap.alloc_slot();
bitmap.alloc_slot();
bitmap.show_allocated_slot();
return 1;
}
void allocate_slots(BitMap& bitmap, std::vector<size_t>& slots, int num_slots) {
for (int i = 0; i < num_slots; i++) {
slots.push_back(bitmap.alloc_slot());
}
}
int test3() {
BitMap bitmap("db");
std::vector<size_t> slots1;
slots1.reserve(1000);
std::vector<size_t> slots2;
slots2.reserve(1000);
// Create two threads to allocate slots concurrently.
std::thread thread1(allocate_slots, std::ref(bitmap), std::ref(slots1), 1000);
std::thread thread2(allocate_slots, std::ref(bitmap), std::ref(slots2), 1000);
// Wait for both threads to finish.
thread1.join();
thread2.join();
// Print the results.
std::cout << "Slots allocated by thread 1:\n";
printVector(slots1);
std::cout << "\n\nSlots allocated by thread 2:\n";
printVector(slots2);
std::cout << "\n\n";
std::vector<size_t> combined_slots = slots1;
combined_slots.insert(combined_slots.end(), slots2.begin(), slots2.end());
std::sort(combined_slots.begin(), combined_slots.end());
// Print the sorted combined slots.
std::cout << "Sorted combined slots:\n";
printVector(combined_slots);
std::cout << "\n\n";
return 1;
}
int main() {
test3(); // 有问题
}